2015-07-19 42 views
-1

我有一個回調函數,其中包含另一個回調的for循環。節點/ Javascript - 多個回調和循環內的變量訪問

我很難理解變量的範圍。我需要在整個嵌套結構訪問out變量:

var out = {"foo":123}; 

persistence.getAllApiKeys(function(err, allKeys){ 

    for (var prop in allKeys) { 

    out = {"baz":456}; 

     persistence.getApiKeyValue("test", function(err2, value) { 

     out = {"success":true}; // <--does not update 

     }); 
    } 

    console.log(out); 
}) 

輸出:

{ baz: 456 } 

如何才能獲得最終的回調裏面出來的變量?即將其設置爲"success":true

+0

當你調用'console.log(out)'時,'getApiKeyValue'函數是異步的;'第二個調用很可能等待API的響應,所以'out = {「success」:true} ;'分配將在稍後執行。 – halfzebra

+0

異步,異步,異步。當你瞭解異步回調以及它們在一段時間後運行的事實時,你就會明白爲什麼你的'out'變量在你登錄時還沒有被設置。您的問題與範圍無關,與您的異步回調時間無關。您只能在回調中使用異步結果,表明其完成。你可以閱讀這個更多的信息:[如何從ajax調用返回響應](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call)。 – jfriend00

回答

0

經典aysnc。 console.loggetApiKeyValue的回調之前執行。把控制檯放在回調裏面,你會發現什麼是錯的。