我有一个进行数据库调用的函数。如果此操作成功,我想返回一个布尔值,但是我总是得到undefined
。正如我已经读过的那样,返回值也应该是一个承诺,但是如果我想then/catch
的“承诺”,我的函数将返回一个undefined
。
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'
输出清楚地表明结果不是承诺,而只是undefined
。感谢您的帮助。
答案 0 :(得分:4)
您不会从foobar
函数本身返回任何内容,而只是返回对.then
和.catch
的调用。
return db.call(data).then(...).catch(...);
您还可以将foobar
更改为ES6箭头函数,并利用隐式返回:
const foobar = data => db.call(data).then(...).catch(...);
请注意,如果您使用const
或let
,则在定义ES6函数之前将无法访问它们-因此请确保如果您使用的是箭头函数,它们都将在一个函数中定义顶部区域。 ES5函数没有这种限制,因为它们全部位于任何代码运行之前。