javascript - 为什么此方法中的回调位于 thenable 中,回调不应成为 updateAll 方法返回语句的一部分?
问题描述
根据loopback 的官方文档,方法 updateAll 有 3 个参数:where、data、callback,需要回调。
Account.deleteSingleHearingTest = function (req, callback) {
Account.findById(req.accessToken.userId)
.then(account => {
if (!account) {
throw new Error('Cannot find user');
}
return app.models.HearingTest.updateAll({ accountId: account.id, id: req.body.hearingTestId }, { isDeleted: new Date() });
})
.then(() => {
callback(null);
})
.catch(error => {
callback(error);
});
}
我可以看到前两个参数在那里,但是,回调似乎不是方法调用的一部分。回调不应该是 updateAllll 方法的一部分吗?
解决方案
我将在答案中详细说明我的评论。我敢打赌,您的代码实际上不起作用,您只是认为它起作用。
假设调用updateAll
返回一些东西(即不抛出错误)——无论是 null、undefined、true 还是其他——那么你的回调将立即被调用,并且实际上不会等待你updateAll
执行它的异步操作。现在,如果调用updateAll
足够快,您可能会觉得代码有效,而实际上却没有。
这可能有助于更好地说明我的意思:
Promise.resolve()
.then(function() { return undefined; })
.then(function() { console.log('it worked!'); });
您可以做两件事(不相互依赖):
- 记录的返回值,
updateAll
看看它是否是一个承诺 - 只要坚持文档所说的并使用回调即可。
就个人而言,我会做 1 然后我会做 2 :)
推荐阅读
- c++ - 当捕获范围是类的数据成员时,我们是否需要将 lambda 标记为可变的
- swift - RxSwift 5.1 中的可变主题替代方案是什么?
- vim - 安装插件vim时vim编译器错误字体
- python - 使用烧瓶中的 send_file() 时文件损坏,pymongo gridfs 中的数据
- excel - Json.Document() 中的参考单元格值 - EXCEL 数据源
- xml - 如何读取 Soap XML 数据
- psftp - psftp 从我通过其他服务器连接的服务器下载文件
- javascript - 正则表达式 - 替换部分网址
- ajv - AJV:没有带有键或参考的模式“https://json-schema.org/draft-07/schema”
- markdown - Pandoc 在转换过程中因退出代码“43”而死:b“生成 PDF 时出错