asynchronous调用for循环导致variables在callback中出错

我有一个函数中的以下代码:

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 } }); } 

我明白什么是外围的,循环完成之前handler.create被调用,所以当它被称为处理程序等于循环的最后一个处理程序。

我该如何解决这个问题?

这是因为closures。 阅读关于它在这里和这里 。

这应该可以解决你的问题。

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