每次迭代时,async.eachSeries只运行一次async.waterfall

时间:2016-02-21 18:19:36

标签: node.js asynchronous async.js

我是异步库的新手。我已经为每次迭代使用了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

异步完成

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

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');
});