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函数的隐式返回特性,否则您需要这样做。我将用这种方法更新我的答案。