Обратная петля с асинхронной библиотекой вызывает проблему последовательного обратного вызова при отправке одного обратного обратного вызова другому. - PullRequest
0 голосов
/ 26 мая 2019

Я использую loopback для backend API, здесь для извлечения данных из MySQL, здесь при выполнении операции над ним я использую библиотеку async npm,

для выполнения функционального выполнения на уровне блоков, при этом они сталкиваются с неудачей с функциональной проблемой autocallBack.

Unhandled rejection TypeError: autoCallback is not a function

вот мой псевдокод.

ModalName.remoteMethod = function (data, cb) {
    async.auto({
      firstCallingFunction: function (autoCallback) {
        ModalName.find({
          id: 1
        }, yourResult => {
            if (err) {
                return cb({
                success: false,
                msg: 'Insufficient parameters',
                data: err,
                });
            } else {
                return autoCallback(null, yourResult);
            }
            });
        },
        secondCallingFunction: ['firstCallingFunction', function (autoCallback, result) {
            console.log('result=====>', result)
            ModalName.find({id: result['id']})
            .then(function(dbResult) {
            if (dbResult) {
                console.log('dbResult==========>', dbResult.toJSON());
                return autoCallback(null, dbResult);
            }
            });
        }],
    }, function (error, autoResult) {
      if (error) {
        return cb(null, error);
      } else {
        return cb(null, {
          success: true,
          msg: 'result fetched',
          data: autoResult.secondCallingFunction,
        });
      }
    });
  };

Получить ==> ошибка в *Функция объекта 1012 * не определена.

Любое решение для этой проблемы, пожалуйста, отправьте.

Спасибо.

1 Ответ

0 голосов
/ 28 мая 2019

Вот решение, я только что изменил аргументы функции, и оно работает для меня!

ModalName.remoteMethod = function (data, cb) {
    async.auto({
      firstCallingFunction: function (autoCallback) {
        ModalName.find({
          id: 1
        }, yourResult => {
            if (err) {
                return autoCallback({
                success: false,
                msg: 'Insufficient parameters',
                data: err,
                });
            } else {
                return autoCallback(null, yourResult);
            }
            });
        },
        secondCallingFunction: ['firstCallingFunction', function (result, autoCallback) {
            console.log('result=====>', result)
            ModalName.find({id: result['id']})
            .then(function(dbResult) {
            if (dbResult) {
                console.log('dbResult==========>', dbResult.toJSON());
                return autoCallback(null, dbResult);
            }
            });
        }],
    }, function (error, autoResult) {
      if (error) {
        return cb(null, error);
      } else {
        return cb(null, {
          success: true,
          msg: 'result fetched',
          data: autoResult.secondCallingFunction,
        });
      }
    });
  };
...