Почему обратный вызов в этом методе находится в доступном для отображения элементе, не должен ли обратный вызов быть частью оператора возврата метода updateAll? - PullRequest
0 голосов
/ 08 января 2019

Согласно официальным документам 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);
        });
}

Я вижу, что есть первые два параметра, однако обратный вызов, похоже, не является частью вызова метода. Разве обратный вызов не должен быть частью метода updateAlll?

1 Ответ

0 голосов
/ 08 января 2019

Я уточню свой комментарий в ответе. Держу пари, твой код на самом деле не работает, ты просто думаешь, что он работает.

Допустим, что вызов updateAll возвращает что-то (т.е. не выдает ошибку) - будь то null, undefined, true, что угодно - тогда ваш обратный вызов будет вызван немедленно и не будет на самом деле ждите, пока ваш updateAll выполнит асинхронную операцию. Теперь, если вызов updateAll был достаточно быстрым, вам может показаться , что код работал тогда, когда он на самом деле не работал.

Это может помочь проиллюстрировать, что я имею в виду немного лучше:

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

Вы можете сделать две вещи (не зависящие друг от друга):

  1. Зарегистрируйте возвращаемое значение updateAll и посмотрите, обещание ли это
  2. Просто придерживайтесь того, что говорят документы, и используйте обратный вызов.

Лично я бы сделал 1, а затем я бы сделал 2:)

...