Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用异步瀑布时,模型的响应未定义_Javascript_Node.js - Fatal编程技术网

Javascript 使用异步瀑布时,模型的响应未定义

Javascript 使用异步瀑布时,模型的响应未定义,javascript,node.js,Javascript,Node.js,我正在尝试将数据返回到视图模板。我正在使用async.瀑布来实现这一点。只有一个问题,该类的结果总是undefined 控制器: Profile().then(response => { console.log(response); }); 型号: module.exports = async function Profile() { let waterfall = await Async.waterfall([ function(callback) {

我正在尝试将数据返回到视图模板。我正在使用async.瀑布来实现这一点。只有一个问题,该类的结果总是
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;
}

让瀑布
始终是
未定义的
,因此来自
概要文件的响应也未定义。为什么它不起作用?如何修复它?

您可以将
异步瀑布
包装成一个
承诺
瀑布的回调只会拒绝/解决承诺。然后,所创建的承诺将根据瀑布的结果进行解析,或者在发生错误时被拒绝

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

你是说这个吗?如果是,则此函数返回未定义的
,因为它是这样定义的
wait
不会神奇地将基于回调的函数转换为返回承诺的函数。@t.niese好的,谢谢您的解释。你对我如何修理它有什么建议吗?