我想调用两个函数并且并行获得结果,但需要调整函数的一个结果。所以功能结构是:
function test(cb) {
async.parallel({
func1: function foo(cb1) {
cb(null, {});
},
func2: function bar(cb2) {
async.waterfall([
function adapt1(next) {
//do something;
},
function adapt2(next) {
//do something;
}
], function handler(err, res) {
//do something.
})
}
}, function handler2(err, res) {
cb(null, {});
})
}
然而,它似乎永远挂在那里。不确定我是否可以这样使用异步....
答案 0 :(得分:3)
当然可以!你必须确保以正确的顺序和首先调用你的回调。例如,func1应该调用cb1
而不是cb
。其次,你的瀑布根本没有调用它们的回调。
以此代码为例。
'use strict';
let async = require('async');
function test(callback) {
async.parallel({
func1: function(cb) {
cb(null, { foo: 'bar' });
},
func2: function(cb) {
async.waterfall([
function(cb2) {
cb2(null, 'a');
},
function(prev, cb2) {
cb2(null, 'b');
}
], function(err, result) {
cb(err, result);
});
}
}, function(err, results) {
callback(err, results);
});
}
test(function(err, result) {
console.log('callback:', err, result);
});
输出:callback: null { func1: { foo: 'bar' }, func2: 'b' }