为什么此方法中的回调位于thenable中,该回调是否不应该成为updateAll方法return语句的一部分?

时间:2019-01-08 02:01:44

标签: javascript node.js loopbackjs loopback

根据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方法的一部分吗?

1 个答案:

答案 0 :(得分:0)

我将在回答中详细说明我的评论。我敢打赌,您的代码实际上并不起作用,您只是认为它可以起作用。

让我们说,对updateAll的调用返回了一些内容(即不会引发错误)-无论该值是否为null,未定义,为true,等等-然后您的回调将立即被调用并且实际上不会等待您的updateAll执行异步操作。现在,如果对updateAll的调用足够快,它可能会出现给您,表明代码实际上没有起作用。

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

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

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

  1. 记录updateAll的返回值,看看它是否是一个承诺
  2. 只需遵循文档所说的内容并使用回调即可。

我个人来说,我会做1,然后我会做2:)