Async.map 和 async.waterfall 没有按预期一起工作
Async.map and async.waterfall not working together as expected
我正在使用 Async。 async.map()
将我的数据数组与函数绑定,并将该函数中的 async.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
您必须调用传递给 waterfall
函数的回调才能在您完成时通知它,例如:
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: ', response);
cb(null, response);
}, function(response,cb){
console.log(' -> updateData: ', response);
cb(null, response);
}], function(err,result){
if(!err) {
console.log('Perfect: ',result);
} else {
console.log('Error: ',err);
}
})
}
使用 async
时,请务必调用您的回调!在您的瀑布方法中,确保调用 cb(null, item)
以便瀑布知道您何时继续。在您的映射函数 myExport
中,务必在瀑布结束时调用 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
我正在使用 Async。 async.map()
将我的数据数组与函数绑定,并将该函数中的 async.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
您必须调用传递给 waterfall
函数的回调才能在您完成时通知它,例如:
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: ', response);
cb(null, response);
}, function(response,cb){
console.log(' -> updateData: ', response);
cb(null, response);
}], function(err,result){
if(!err) {
console.log('Perfect: ',result);
} else {
console.log('Error: ',err);
}
})
}
使用 async
时,请务必调用您的回调!在您的瀑布方法中,确保调用 cb(null, item)
以便瀑布知道您何时继续。在您的映射函数 myExport
中,务必在瀑布结束时调用 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