2016-01-05 2 views
0

У меня проблема с моим кодом nodejs. Я пытаюсь использовать эту функцию для сбора некоторой информации с некоторых серверов.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

Вы не объявили imageNodeArray. В JavaScript, если вы присваиваете значение идентификатору без объявления этого идентификатора с помощью ключевого слова var, переменная неявно создается в глобальной области.

Понадобится:

var imageNodeArray = JSON.parse(jsonString);

+0

Большое спасибо. Я действительно не видел эту маленькую ошибку, но теперь все работает как шарм. – BitKoch

Смежные вопросы