我確定我的問題是基於對node.js中的異步編程缺乏理解,但是在這裏。Node.JS:如何將變量傳遞給異步回調?
例如:我有一個我想要抓取的鏈接列表。當每個異步請求返回時,我想知道它適用於哪個URL。但是,可能是因爲競爭條件,每個請求都會返回,並將URL設置爲列表中的最後一個值。
var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
var url = links[link];
require('request')(url, function() {
console.log(url);
});
}
預期輸出:
http://google.com
http://yahoo.com
實際輸出:
http://yahoo.com
http://yahoo.com
所以我的問題可以是:
- 我如何通過URL(按價值計算)的回撥功能?或
- 鏈接HTTP請求的正確方式是什麼,以便它們按順序運行?或
- 我失蹤的東西?
PS:對於1.我不想要一個解決方案來檢查回調的參數,但是知道變量'從上面'的回調的一般方法。
這不是範圍。這是關閉。很多其他語言沒有封鎖範圍,但由於缺乏封鎖而沒有面對這個問題。 – slebetman
問題是,如果JavaScript確實支持塊範圍,那麼在OP代碼的回調函數中對'url'的閉包訪問就可以工作,因爲循環的每次迭代都會得到自己的url變量(就像在C#中一樣)。 – JohnnyHK
爲了簡潔起見,需求就在那裏,在我的代碼中,所有需求都是在開始階段。 – Marc