代码之家  ›  专栏  ›  技术社区  ›  Anupam Maurya

在将一个结果回调发送到另一个结果回调时,使用异步库的环回出现串行回调问题

  •  0
  • Anupam Maurya  · 技术社区  · 6 年前

    我使用的是后端API的环回,这里用于从MySQL获取数据,在这里执行操作时,我使用 async npm 图书馆,

    执行块级功能执行,而在执行这些操作时,由于自动回拨功能问题而遇到挫折。

    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,
            });
          }
        });
      };
    

    进入==>出错 autoResult 的对象函数未定义。

    关于这个问题的任何解决方案,请发送。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Anupam Maurya    6 年前

    这是解决方案,我只是改变了函数参数,它对我有用!

    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,
            });
          }
        });
      };