回调/关闭问题

时间:2016-06-15 14:29:53

标签: node.js asynchronous callback closures

下午所有,

我是一个非常新的NodeJS程序员(三周经验),我真的很难用下面的代码:

var bodyParser = require('body-parser');
var async = require('async');
var async2 = require('async');
var async3 = require('async');

function updateJSONSubmission(submission, mainCallback) {

  async.each(submission.list, function(topItem, outerCallback) {

    console.log("Outer Loop ");

    async2.each(topItem.fields.formFields, function(midItem, midCallback) {

      console.log("Middle Loop " + midItem.fieldId.type);

      if (midItem.fieldId.type === "signature" || midItem.fieldId.type === "photograph") {

          async3.each(midItem.fieldValues, function(innerItem, innerCallback) {

              console.log("Inner Loop " + innerItem.contentType);

              if (innerItem.contentType === "base64") {
                console.log("Found result: " + innerItem.fileName);

                innerItem.base64Image = innerItem.fileName;

                innerCallback(null, innerItem);
              }

          }, function(err) {
              midCallback(null, midItem);
          });

      }

    }, function(err) {
        outerCallback(null, topItem);
    });



  }, function(err) {
      //all loops complete
        if (!err) {
          console.log("Done");
          mainCallback(null, submission);
        }
  });

}

基本上我正在尝试遍历许多JSON数组。当我正在调试时,第一个async.each完成后我遇到了问题 - 我希望这会输入下面的代码,但不是:

 function(err) {
      //all loops complete
        if (!err) {
          console.log("Done");
          mainCallback(null, submission);
        }

我确信我刚刚收到一些关闭/回调错误,但这让我心理上试图找到它。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:1)

如果您的条件if (midItem.fieldId.type === "signature" || midItem.fieldId.type === "photograph")为false,则永远不会调用midCallback

if (innerItem.contentType === "base64")

相同

此外,您不需要多次要求async个模块。需要一次,然后简单地使用它。

const async = require('async');

async.each(obj, (data) => {
  async.parallel([]);
});