2015-12-02 119 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不,它仍然是异步的。 –