2

考虑以下

function firstFunction() {
  for ( var i = 0; i < 10; i++) 
    FB.api(apiPath,function(response) {
      secondFunction(response,i);
  });
}

function secondFunction(response,num) {
  alert(num);
}

我希望 secondFunction 被异步调用 10 次,每次在 num 中接收不同的数字。相反, secondFunction 被调用了 10 次,并且所有的 num 都是 10。

有人可以向我解释为什么它没有像我期望的那样通过以及我如何修复它以像我期望的那样运行?

谢谢

4

2 回答 2

4

在第一个异步回调执行之前,您的同步for循环一直递增i到 10 。FB.api

像这样:

function firstFunction() {
  for ( var i = 0; i < 10; i++) {
    (function(i2) {
      FB.api(apiPath,function(response) {
        secondFunction(response, i2);
      });
    })(i);
  }
}

该修复将异步函数调用放入其自己的函数中,以便i可以作为参数传入,捕获i调用时的值,而不是异步回调发生时的值。

于 2013-01-25T19:15:16.813 回答
0

这是因为第二个函数仅在服务器返回异步调用响应并且循环继续运行时才被调用,当服务器响应时 var I 已经为 10。

要修复它,您需要音调能够将 i 变量传递给第一个 api,然后将其传递给第二个,这样您就可以引用了。

您可能需要重构方法以使它们循环 10 次

于 2013-01-25T19:23:01.540 回答