2015-12-02 136 views
1

我在一個函數下面的代碼:異步調用是錯誤的回調

for (var key in handlers) { 
    var handler = new handlerClass(key); 
    handler.search(user.login, function(userFound) { 
    if (!userFound) { 
     handler.create... //Here handler is the last handler of the loop 
    } 
    }); 
} 

我明白了什麼appens,handler.create前循環結束被調用,所以當它是所謂的處理程序等於循環的最後一個處理程序。

我該如何解決這個問題?

回答

4

這是因爲關閉。閱讀有關它herehere

這應該可以解決您的問題。

for (var key in handlers) { 
    var handler = new handlerClass(key); 
    (function (handlerInstance) { 
     handlerInstance.search(user.login, function (userFound) { 
      if (!userFound) { 
       // use handlerInstance here 
      } 
     }); 
    })(handler); 
} 
+0

在這種情況下,代碼是否同步? –

+0

@BlazeSahlzen不,它仍然是異步的。 –