2012-06-03 48 views
0

我有異步代碼的Node.js應用程序是這樣的:最佳的方式來傳遞狀態,以異步功能的Node.js

var localvar1 = ...; 
var localvar2 = ...; 
var localvar3 = ...; 
// do async database query 
conn.query("select ...", function(err, res) { 
    // fetch results asynchronously 
    res.fetchAll(function(err, rows) { 
     if (rows.length == 0) // no, data, fetch from external HTTP source 
     { 
      // fetch from Internet asynchronously 
      https.get(..., function() { 
       // ok, got it, now save 
       // I need values from original function here *** 
       saveData(localvar1, localvar2, localvar3); 
      }); 
     } 
    }); 
); 

什麼是localvar1-3的值傳遞給最裏面的函數的最佳方式?

如果您爲此建議一些庫,請提供可與我上面編寫的代碼一起使用的示例代碼。

+0

'//從互聯網asynchronously'部分獲取可能是acepting你'localvar's功能(和別的東西,如果需要的話)。 – elmigranto

+0

@elmigranto:怎麼樣?請顯示代碼。 –

+0

您的變量已經在最內層的函數中可見,需要更多關於您想要完成的細節。 – lanzz

回答

1

由於封鎖,內部函數可以訪問外功能或模塊本身中定義的局部變量,所以你的代碼編寫將工作如果localvar1,等人,不要在等待改變你的https.get()回調被調用。如果他們確實發生了變化,您的回調將會看到他們的新值,而不是他們在請求時的價值。如果這是一個問題,創建一個新的閉包「捕捉」到他們:

https.get(..., (function(arg1, arg2, arg3) { 
    return function() { 
     saveData(arg1, arg2, arg3); 
    } 
})(localvar1, localvar2, localvar3)); 
相關問題