Javascript 节点js async.parallel与wait是否可能?

Javascript 节点js async.parallel与wait是否可能?,javascript,node.js,async.js,Javascript,Node.js,Async.js,节点js中的async.parallel有问题。下面的代码是完美的 var data = {}; data.task_1= function(callback) { var res_1 = "hello 1"; callback(null, res_1); } data.task_2 = function(callback) { var res_2 = "hello 2"; callback(null,

节点js中的async.parallel有问题。下面的代码是完美的

  var data = {};

  data.task_1= function(callback) { 
    var res_1 = "hello 1";
    callback(null, res_1);
  }
  data.task_2 = function(callback) { 
    var res_2 = "hello 2";
    callback(null, res_2);
  }

  async.parallel(data, function(err, results) {
    if (err){
      console.log(err);
    }
    console.log(results);
  });
结果是:{task_1:'hello 1',task_2:'hello 2'}

但是,如果我尝试使用从数据库调用数据的函数执行此任务,则会出现以下错误: TypeError:callback不是函数,结果{task_2:'hello 2',task_1:undefined}

我在日志中看到,在记录json文件之前检索数据

这是我的密码:

  var data = {};

  data.task_1 = async function(callback) { 
    var res_1 = await getData("xyz");
    console.log(res_1);
    callback(null, res_1);
  }
  data.task_2 = function(callback) { 
    var res_2 = "hello 2";
    callback(null, res_2);
  }

  async.parallel(data, function(err, results) {
    if (err){
      console.log(err);
    }
    console.log(results);
  });

我错过了什么?谢谢你的帮助

您可以从getData()返回结果,这应该可以工作(根据文档):,您也可以使用wait语句:

var data = {};

data.task_1 = async function() { 
    var res_1 = await getData("xyz");
    console.log(res_1);
    return res_1;
}
data.task_2 = function(callback) { 
    var res_2 = "hello 2";
    callback(null, res_2);
}

async.parallel(data, function(err, results) {
    if (err){
        console.log(err);
    }
    console.log(results);
});

我相信这是因为如果我们将函数标记为async,则不会传递回调。因此,如果我分配一个非异步函数并使用.then(),回调将被传递,所有回调都将正常工作!在文档中:“无论我们在哪里接受节点样式的异步函数,我们也直接接受ES2017异步函数。在这种情况下,异步函数将不会被传递一个最终回调参数”,这解释了错误消息“回调不是函数。”

这与使用async/await有什么不同?@SoulKa:可能不是,从你的角度来看。就我个人而言,我喜欢他们在这里使用的连续传球方式。太棒了!谢谢。它可以工作,但我也看不到async/await的区别……我相信这是因为如果我们将函数标记为async,则不会传递回调。因此,如果我分配一个非异步函数并使用.then(),回调将被传递,所有回调都将正常工作!从文档中可以看出:“无论我们在哪里接受节点样式的异步函数,我们也直接接受ES2017异步函数。在这种情况下,异步函数将不会被传递一个最终回调参数”,这解释了错误消息“回调不是函数”。我想澄清一下,因为这个问题是用
wait