javascript - 承诺中的返回值总是未定义的
问题描述
我有一个进行数据库调用的函数。如果此操作成功,我想返回一个布尔值,但我总是得到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);
});
未捕获的类型错误:无法读取未定义的属性“then”
输出清楚地表明结果不是一个承诺,它只是undefined
. 我很感激任何帮助。
解决方案
您没有从函数本身返回任何内容- 只是对andfoobar
的调用。.then
.catch
return db.call(data).then(...).catch(...);
您还可以更改foobar
为 ES6 箭头函数并利用隐式返回:
const foobar = data => db.call(data).then(...).catch(...);
const
请注意,如果您使用或定义 ES6 函数之前将无法访问它们let
- 所以请确保如果您使用箭头函数,它们都定义在顶部的一个区域中。ES5 函数没有这样的限制,因为它们都位于任何代码运行之前。
推荐阅读
- jpa - 我应该获取加入所有延迟加载的实体吗?
- ios - 我将我的麦克风用作麦克风并连接到无线设备,但很快就会出现 2 秒的延迟
- flutter - 带有 Getx 的 Flutter Navigator 2.0
- conda - 使用 TensorFlow 脚本关闭内核时出现 JupyterLab 错误消息
- node.js - 操作 `roles.findOne()` 缓冲在 10000 毫秒后超时
- node.js - 错误:运行 Yo Office 时连接 ETIMEDOUT
- python - Pyinstaller 生成大文件大小的 .exe
- elasticsearch - 使用 Nest 库在 elasticsearch 中应用聚合后,如何获取聚合的记录?
- javascript - 回复交互时无法将文件附加到 MessageEmbed
- python - 为什么Django过滤器给我这个错误'QuerySet'对象没有属性'user_id'?