javascript - Async.map 和 async.waterfall 没有按预期一起工作

标签 javascript node.js async.js

我正在使用 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/

相关文章:

javascript - 为 async.parallel 编写测试。

javascript - 更改谷歌地图数据层点的 z-index

javascript - 从文件填充 html 列表

javascript - Lodash:在自己的数组中找到所有具有特定值的键

javascript - 如何向express服务器提交表单数据?

javascript - Number.isNaN ('asd' ) === 在 Node.js 中为 false!是什么赋予了?

node.js - 如何停止执行node.js异步错误时的 waterfall ?

javascript - 如何使用 JavaScript 管理后退按钮

javascript - 我可以在 javascript 中找到函数参数的类名吗?

computer-science - 迭代器 vs.重复