我正在尝试将数据返回到我的视图模板。我正在使用async.waterfall来做到这一点。只有一个问题,该类的结果始终为undefined

控制器:

Profile().then(response => {
    console.log(response);
});


模型:

module.exports = async function Profile() {
    let waterfall = await Async.waterfall([
        function(callback) {
            db.getOneWhere('users', 'username', global.req.params.username, ["username"]).then(result => {
                callback(null, result);
            });
        },
        function(arg1, callback) {
            db.getOneWhere('users', 'username', 'admin', ["username"]).then(result2 => {
                let ok = {
                    arg1,
                    result2
                }
                callback(null, ok);
            });
        }
    ], function (err, result) {
        let tmp = [];
        Object.keys(result).forEach(function(k) {
            tmp = [...tmp, ...result[k]];
        });

        return {'data': tmp};
    });

    return waterfall;
}


let waterfall始终为undefined,因此来自Profile.then()...的响应也未定义。为什么它不起作用?如何解决?

最佳答案

您可以将Async.waterfall包装到Promise中,然后瀑布的回调仅执行拒绝/解决承诺。然后,创建的Promise将以瀑布的结果进行解析,或者在发生错误时被拒绝。

module.exports = async function Profile() {
  let result = await new Promise((resolve, reject) => {
    Async.waterfall([ /*....*/ ], (err, result) => {
      if (err) {
        reject(err)
      } else {
        resolve(result)
      }
    })
  })

  let tmp = [];
  Object.keys(result).forEach(function(k) {
    tmp = [...tmp, ...result[k]];
  });

  return {
    'data': tmp
  };
}

09-19 14:23