根据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 :)

09-25 12:09