nodeJs回调共享变量?

时间:2016-01-05 14:48:23

标签: javascript node.js

所以我的nodejs代码有问题。 我尝试使用此功能从一些服务器收集一些信息。

背景:  我有一些服务器,它们只是控制和监控的东西,还有一些用于工作。 我在我的代码中调用函数就像这样

// 1 callback    
cmd.execute('getInformationScript ' + controlToken, function(queryResult){
        exctractInfo(queryResult, function(result){
          setcNodes(result)
        });
    });

//2 callback
cmd.execute('getInformationScript ' + imageToken, function(queryResult){
        exctractInfo(queryResult, function(result){
          setiNodes(result)
        });
    });


function exctractInfo(jsonString, callbackSucc){
  var callbackArray = [];
  var callbackResultArray = []

  if(jsonString != null){
    imageNodeArray = JSON.parse(jsonString);

    for(imageNodes in imageNodeArray){

      for(imageDetail in imageNodeArray[imageNodes]){

        if ('name' in imageNodeArray[imageNodes][imageDetail]){
              var name = imageNodeArray[imageNodes][imageDetail]['name'];
              callbackArray.push(imageNodeArray[imageNodes][imageDetail])

              // variable problem
              cmd.execute('getInfomationFromServer.sh '+name+'', function(shellResult){
               callbackResultArray.push(JSON.parse(shellResult));
              if(callbackResultArray.length == callbackArray.length){
                   imageNodeArray[imageNodes] = mapCallbacks(callbackArray,callbackResultArray);

                   callbackSucc(imageNodeArray);
                   imageNodeArray = []
              }
          });
        }
      }
    }
  }
}

经过一些调试后,我可以看到我存储我的回调以计算它们的数组似乎被覆盖了。那么现在是一个非常愚蠢的问题......为什么? 我强调每个回调函数都有自己的范围,所以为什么它们会互相覆盖。

我真的希望你能帮助我,这让我发疯了。

1 个答案:

答案 0 :(得分:0)

您没有声明imageNodeArray。在JavaScript中,如果您为标识符分配值而未通过var关键字声明该标识符,则会在全局范围内隐式创建该变量。

你需要:

var imageNodeArray = JSON.parse(jsonString);