2011-06-08 126 views
1

如何將匿名函數內的值賦給全局變量或其範圍外的變量。例如,下面的例子。 console.log(rows)返回正確的數據,而console.log(result)返回未定義匿名函數範圍混淆

var result; 
this.query(sql).execute(function(error, rows) { 
    console.log(rows) 
    result = rows; 
}); 
console.log(result); 

回答

8

Node.js的是事件驅動的,這意味着大部分功能是異步的。 execute函數不會返回任何值,因爲「返回」值位於聲明爲第一個參數的匿名函數中,只有在查詢已執行並且數據庫已返回值時纔會調用該函數。所以你的result變量不包含任何值,因爲沒有什麼可返回的。

** 編輯 **

即使你的編輯,分配rows被執行之前,你登錄的變量result行,因爲匿名函數只執行,當查詢完成時。

+0

更改了示例代碼,我複製了不正確的代碼。同樣的結果。 – HyderA 2011-06-08 02:56:59

+0

它不會改變任何東西。 'result'將不會保留任何值,只是因爲匿名函數*異步*執行,意思是*稍後* – 2011-06-08 02:59:06

+0

啊,是的,這是有道理的! – HyderA 2011-06-08 03:01:26

0

.execute返回什麼?它可能只是處理由.query返回的項目而不返回數組