Javascript
在非同步請求中獲取“i”
我有一個查看請求,它返回數量 X,然後通過 for 循環觸發函式 X 次。它可以正常工作,但由於非同步請求,我沒有得到觸發函式/請求的正確 i 值。(javascript)程式碼:
X = [0,2,4,6] for(var i = 0; i < X.length; i++) { // i is the user ID contract.getUser(i, function (err, result) { if (err) { ///// } else if (result) { // I want to return the current i-value (loop-value), // But due to the asynchronous request, it always returns the // last value (in our example 4) console.log(i); } } }
一切正常(我得到了使用者),但我無法重定向到例如 url.com/user/ID,因為 ID (i) 始終相同。
感謝幫助!
問題是
i
所有回調函式都擷取了相同的值,因此在最終呼叫它們時它們都看到相同的值。一種流行的解決方法是使用立即呼叫的函式表達式 (IIFE),如下所示:
X = [0,2,4,6] for (var i = 0; i < X.length; i++) { (function (n) { // function is defined here contract.getUser(n, function (err, result) { if (err) { ... } else if (result) { console.log(n); } }); })(i); // and immediately executed here, with a specific i value passed in }