nodeJ的回调共享变量

nodeJs callbacks sharing variables?

本文关键字:共享变量 回调 nodeJ      更新时间:2023-09-26

所以我的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 = []
              }
          });
        }
      }
    }
  }
}

经过一些调试,我可以看到我存储回调以计数它们的数组似乎被覆盖了。所以现在一个非常愚蠢的问题。。。为什么?我减轻了困难,每个回调函数都有自己的作用域,所以它们为什么会互相覆盖。

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

您没有声明imageNodeArray。在JavaScript中,如果您在没有通过var关键字声明标识符的情况下为标识符分配值,那么该变量将在全局范围内隐式创建。

您需要:

var imageNodeArray = JSON.parse(jsonString);