[英]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
使用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
您必須調用傳遞給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);
}
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.