Javascript

在非同步請求中獲取“i”

  • May 26, 2019

我有一個查看請求,它返回數量 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
}

引用自:https://ethereum.stackexchange.com/questions/69958