所以我的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 = []
}
});
}
}
}
}
}
经过一些调试后,我可以看到我存储我的回调以计算它们的数组似乎被覆盖了。那么现在是一个非常愚蠢的问题......为什么? 我强调每个回调函数都有自己的范围,所以为什么它们会互相覆盖。
我真的希望你能帮助我,这让我发疯了。
答案 0 :(得分:0)
您没有声明imageNodeArray
。在JavaScript中,如果您为标识符分配值而未通过var
关键字声明该标识符,则会在全局范围内隐式创建该变量。
你需要:
var imageNodeArray = JSON.parse(jsonString);