考虑以下
function firstFunction() {
for ( var i = 0; i < 10; i++)
FB.api(apiPath,function(response) {
secondFunction(response,i);
});
}
function secondFunction(response,num) {
alert(num);
}
我希望第二个函数异步调用10次,每次在num中接收不同的数字。 相反,secondFunction被调用10次,并且在所有这些中,num是10。
有人可以向我解释为什么它没有像我期望的那样传递,以及我如何能够像我期望的那样修复它?
由于
答案 0 :(得分:4)
在第一个for
异步回调执行之前,您的同步i
循环将FB.api
一直递增到10。
像这样:
function firstFunction() {
for ( var i = 0; i < 10; i++) {
(function(i2) {
FB.api(apiPath,function(response) {
secondFunction(response, i2);
});
})(i);
}
}
修复程序将异步函数调用放入其自己的函数中,以便i
可以作为参数传入,在调用时捕获i
的值,而不是异步时发生回调。
答案 1 :(得分:0)
这是因为第二个函数仅在服务器在异步调用上返回响应并且循环继续运行时调用,当服务器响应var I已经是10时。
要修复它,你需要能够将i变量传递给第一个api,然后将它传递给第二个所以你可以参考。
您可能必须重构该方法以使其循环10次