gpt4 book ai didi

javascript - 为什么此方法中的回调位于 thenable 中,回调不应该是 updateAll 方法返回语句的一部分吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:27 26 4
gpt4 key购买 nike

根据loopback's official docs ,updateAll方法有3个参数:where、data、callback,其中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、未定义、true 还是其他 - 那么您的回调将被立即调用,并且实际上不会等待您的 updateAll 执行其异步操作。现在,如果对 updateAll 的调用足够快,您可能会觉得代码有效,但实际上却无效。

这可能有助于更好地说明我的意思:

Promise.resolve()
.then(function() { return undefined; })
.then(function() { console.log('it worked!'); });

您可以做两件事(彼此不依赖):

  1. 记录 updateAll 的返回值并查看它是否是一个 Promise
  2. 只需遵循文档的说明并使用回调即可。

就我个人而言,我会先做 1,然后再做 2:)

关于javascript - 为什么此方法中的回调位于 thenable 中,回调不应该是 updateAll 方法返回语句的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54084339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com