根据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);
});
}
我可以看到前两个参数在那里,但是,回调似乎并不是方法调用的一部分。回调不应该是updateAlll方法的一部分吗?
最佳答案
我将在回答中详细说明我的评论。我敢打赌,您的代码实际上并不起作用,您只是认为它可以起作用。
假设对updateAll
的调用返回了一些内容(即不会引发错误),无论该结果是否为null,undefined,true等等,然后您的回调将立即被调用,并且实际上不会等待您的updateAll
执行它是异步操作。现在,如果对updateAll
的调用足够快,那么您可能会发现该代码可以正常工作,而实际上却不能。
这可能有助于说明我的意思更好:
Promise.resolve()
.then(function() { return undefined; })
.then(function() { console.log('it worked!'); });
您可以做两件事(彼此不依赖):
记录
updateAll
的返回值,看看是否是一个承诺只需遵守文档所说的内容并使用回调即可。
就个人而言,我会做1,然后我会做2 :)