Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺内的返回值始终未定义_Javascript_Ecmascript 6_Promise_Return - Fatal编程技术网

Javascript 承诺内的返回值始终未定义

Javascript 承诺内的返回值始终未定义,javascript,ecmascript-6,promise,return,Javascript,Ecmascript 6,Promise,Return,我有一个函数可以调用数据库。如果此操作成功,我想返回一个布尔值,但我总是得到未定义的。正如我所读到的,返回值也应该是一个承诺,但是如果我想那么/catch这个“承诺”,我的函数返回一个未定义的 const foobar = function(data) { db.call(data).then(function(res) { console.log(res); // returns the expected data, e.g.["foobar", "foo", "bar

我有一个函数可以调用数据库。如果此操作成功,我想返回一个布尔值,但我总是得到未定义的
。正如我所读到的,返回值也应该是一个承诺,但是如果我想
那么/catch
这个“承诺”,我的函数返回一个
未定义的

const foobar = function(data) {
    db.call(data).then(function(res) {
        console.log(res); // returns the expected data, e.g.["foobar", "foo", "bar"]
        return res.includes("bar");
    }).catch(function(err) {
        // if an error occures, the function should ...
        // ... return a false value as well
        return false;
    });
};
我的函数调用如下所示:
foobar({1:'a'})
。如何以正确的方式获取布尔返回值? 我尝试了以下两种选择:

首先,我认为返回值应该是一个普通的布尔值:

const return_value = foorbar({1: 'a'}); // returns undefined
在我读到
then
函数中的返回值也是一个承诺之后,我尝试
then/catch
它:

const return_value = foobar({1: 'a'}
).then(function(res) {
    console.log(res); 
}).catch(function(err) {
    console.log(err); 
});
未捕获的TypeError:无法读取未定义的属性“then”


输出清楚地表明结果不是承诺,它只是
未定义的
。非常感谢您的帮助。

您没有从
foobar
函数本身返回任何内容-只是调用
。然后
。catch

return db.call(data).then(...).catch(...);
您还可以将
foobar
更改为ES6箭头函数,并利用隐式返回:

const foobar = data => db.call(data).then(...).catch(...);

请注意,如果使用
const
let
,ES6函数在定义之前将无法访问-因此,如果使用箭头函数,请确保它们都在顶部的一个区域中定义。ES5函数没有这样的限制,因为它们都位于任何代码运行之前。

您不会从
foobar
函数本身返回任何内容-只返回对
.then
catch的调用

return db.call(data).then(...).catch(...);
您还可以将
foobar
更改为ES6箭头函数,并利用隐式返回:

const foobar = data => db.call(data).then(...).catch(...);

请注意,如果使用
const
let
,ES6函数在定义之前将无法访问-因此,如果使用箭头函数,请确保它们都在顶部的一个区域中定义。ES5函数没有这样的限制,因为它们都位于任何代码运行之前。

谢谢,我显然是瞎的。是否有其他方式接收此类返回值?或者有更好的方法吗?除非您使用ES6 arrow函数的隐式返回特性,否则您需要这样做。我会用这种方法更新我的答案。谢谢,我显然是瞎子。是否有其他方式接收此类返回值?或者有更好的方法吗?除非您使用ES6 arrow函数的隐式返回特性,否则您需要这样做。我将用这种方法更新我的答案。