【问题标题】:async.eachSeries runs only once with async.waterfall inside for each iterationasync.eachSeries 每次迭代只运行一次,其中包含 async.waterfall
【发布时间】:2016-06-03 01:48:20
【问题描述】:

我是异步库的新手。我在每次迭代中都使用了 async.eachSeries 和 async.waterfall。我明白了,async.waterfall 只运行一次。

这是我的代码:

var fs = require('fs'),
async = require('async'),
Client = require('node-rest-client').Client;

// REST API Call and output in jsonOutput.results

console.log(jsonOutput.results.length); // jsonOutput.results has 124 records.

async.eachSeries(jsonOutput.results, function(account, callback) {
  var dataObject = {};
  dataObject.updatetime = new Date();

  var setAccountInfoURL = ""; // Data Update REST API Request

  async.waterfall([
    function setAccountInfo(updateCallback) {
      // client.get(setAccountInfoURL, function (data, response) {
      //   var jsonOutput = JSON.parse(data.toString('utf8'));

      updateCallback(null, "output", account)
      // });
    },
    function saveAccountInfo(jsonOutput, account, updateCallback) {
      var debuglog = JSON.stringify(account) + "\n" + jsonOutput;

      fs.appendFile("debuginfo.json", debuglog + "\n", function (err) {
        if(err) {
          console.log(err);
        }

        console.log("JSON saved to " + "debuginfo.json");
        updateCallback(null);
      });
    }
  ],function asyncComplete(err) {
    if (err) {
      console.warn('Error setting account info.', err);
    }

    console.log('async completed');
  });
}, function(err){
  if (err) {
    console.log('error in loop');
  }

  console.log('loop completed');
});

输出:

124

JSON 保存到 debuginfo.json

异步完成

非常感谢任何帮助。

【问题讨论】:

    标签: node.js asynchronous async.js


    【解决方案1】:

    我发现了我的错误。我错过了在异步完成后每次迭代后调用回调。

    var fs = require('fs'),
    async = require('async'),
    Client = require('node-rest-client').Client;
    
    // REST API Call and output in jsonOutput.results
    
    console.log(jsonOutput.results.length); // jsonOutput.results has 124 records.
    
    async.eachSeries(jsonOutput.results, function(account, callback) {
      var dataObject = {};
      dataObject.updatetime = new Date();
    
      var setAccountInfoURL = ""; // Data Update REST API Request
    
      async.waterfall([
        function setAccountInfo(updateCallback) {
          // client.get(setAccountInfoURL, function (data, response) {
          //   var jsonOutput = JSON.parse(data.toString('utf8'));
    
          updateCallback(null, "output", account)
          // });
        },
        function saveAccountInfo(jsonOutput, account, updateCallback) {
          var debuglog = JSON.stringify(account) + "\n" + jsonOutput;
    
          fs.appendFile("debuginfo.json", debuglog + "\n", function (err) {
            if(err) {
              console.log(err);
            }
    
            console.log("JSON saved to " + "debuginfo.json");
            updateCallback(null);
          });
        }
      ],function asyncComplete(err) {
        if (err) {
          console.warn('Error setting account info.', err);
        }
    
        console.log('async completed');
        callback(null);  // this is the change.
      });
    
    }, function(err){
      if (err) {
        console.log('error in loop');
      }
    
      console.log('loop completed');
    });
    

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 2015-12-17
      • 2012-12-08
      相关资源
      最近更新 更多