Javascript 节点js async.parallel与wait是否可能?
节点js中的async.parallel有问题。下面的代码是完美的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,
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