我正在使用 Async . async.map()
将我的数据数组与函数绑定(bind),并在该函数中使用 async.waterfall()
来运行一系列函数,但 waterfall 未按预期工作。我也试过系列但没有成功。
var myData = [1,2,3];
async.map(myData, myExport, function (err, result) {
if(!err) {
console.log('Finished: ' + result);
} else {
console.log('Error: ' + err);
}});
function myExport(item, callback) {
console.log('item Value: ', item );
async.waterfall([function(cb){
console.log(' -> exportData: ', item);
},function(response,cb){
console.log(' -> saveData: ', item);
},
function(response,cb){
console.log(' -> updateData: ', item);
}], function(err,result){
if(!err) {
console.log('Perfect: ',result);
} else {
console.log('Error: ',err);
}
})
}
输出:
item Value: 1
-> exportData: 1
item Value: 2
-> exportData: 2
item Value: 3
-> exportData: 3
要求的输出:
item Value: 1
-> exportData: 1
-> saveData: 1
-> updateData: 1
item Value: 2
-> exportData: 2
-> saveData: 2
-> updateData: 2
item Value: 3
-> exportData: 3
-> saveData: 3
-> updateData: 3
最佳答案
当使用 async
时,一定要调用回调!在您的 waterfall 方法中,确保调用 cb(null, item)
以便 waterfall 知道您何时继续。在您的映射函数 myExport
中,确保在 waterfall 完成时调用 callback
。
工作代码:
var async = require('async');
var myData = [1,2,3];
async.mapSeries(myData, myExport, function (err, result) {
if(!err) {
console.log('Finished: ' + result);
} else {
console.log('Error: ' + err);
}});
function myExport(item, callback) {
console.log('item Value: ', item );
async.waterfall([function(cb){
console.log(' -> exportData: ', item);
cb(null, item);
},function(response,cb){
console.log(' -> saveData: ', item);
cb(null, item);
},
function(response,cb){
console.log(' -> updateData: ', item);
cb(null, item);
}], function(err,result){
if(!err) {
console.log('Perfect: ',result);
} else {
console.log('Error: ',err);
}
callback( err, result);
})
}
输出:
chimmelb:~/Documents/workspace/scratch$ node index.js
item Value: 1
-> exportData: 1
-> saveData: 1
-> updateData: 1
Perfect: 1
item Value: 2
-> exportData: 2
-> saveData: 2
-> updateData: 2
Perfect: 2
item Value: 3
-> exportData: 3
-> saveData: 3
-> updateData: 3
Perfect: 3
Finished: 1,2,3
关于javascript - Async.map 和 async.waterfall 没有按预期一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31516680/