簡體   English   中英

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

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM