javascript - 使用异步 waterfall 时模型的响应未定义

标签 javascript node.js

我正在尝试将数据返回到我的 View 模板。我正在使用 async.waterfall 来执行此操作。只有一个问题,类的结果总是undefined

Controller :

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 中,然后 waterfall 的回调只会执行拒绝/解决 promise 。然后创建的 Promise 将使用 waterfall 的结果解决,或者如果发生错误则被拒绝。

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

关于javascript - 使用异步 waterfall 时模型的响应未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279102/

相关文章:

javascript - 即使输入被隐藏,也要在输入文本旁边放置按钮?

用户必须进行交互的javascript函数,添加似乎不起作用

node.js - 将嵌套对象链表转换为数组 Node js

javascript - 如何在一定时间间隔后重复调用函数

javascript - 使用带有故事书的全局 scss

javascript - 为什么在 onsubmit 返回 undefined 之后提交表单?

node.js - Docker Dynamodb 错误 : Nodejs App with dynamodb does not work in docker but works without it

javascript - 使用 node.js 重命名文件

ruby-on-rails - Juggernaut 2 的服务器端计时器

node.js - fatal error : Evacuation Allocation failed - process out of memory