0

我有一个应用程序,我必须

FB.api(/me) FB.api(/me/friends)。

我希望一旦用户通过身份验证登录到一个新页面,我将拥有 window.location.href.(xx)。

所以我的 pesduocode 是:

checkuserdetails()
{
FB.api(/me)
FB.api(/me/friends).
window.location.href.(xx).

}

我在回调函数中有警报,它们永远不会被执行并且页面被重定向。正如 CBroe 所建议的,我保留了 window.location.href。在卡尔回来。但这也有问题。

就像这样:

pseduo code:
    checkuserdetails()
    {
    FB.api(/me)
    FB.api(/me/friends){    window.location.href.(xx).}.    
    }

朋友中的警报永远不会被执行。

伪代码:checkuserdetails() { FB.api(/me) { window.location.href.(xx).}。FB.api(/我/朋友)

}

两个警报都被执行。

我的问题: 1) 有时我看到来自/me/friends 的警报首先被执行,有时在/me 中。我知道 FB 是异步的,如何使 ut 连续...如果我有很多 FB.api 调用(超过 2 个),如何将 windows.location 保存在哪里?如何控制异步功能

4

1 回答 1

2

所有 API 调用都是异步的,因此如果您需要在所有这些都完成后执行某些操作,那么您需要让它们串行执行(不建议 perf),或者与同步并行执行。

为此,您可以使用诸如 Promises 或 Futures 之类的模式,或者像这样简单的东西

var results = [], done = 0;
function allDone(d1, d2) {
  // do something with d1 and d2
}

FB.api('/...', {..}, function(data) {
  results[0] = data;
  if (done === 2) {
    allDone.apply(null, results);
  }
});

FB.api('/...', {..}, function(data) {
  results[1] = data;
  if (done === 2) {
    allDone.apply(null, results);
  }
});

这当然可以抽象为一些辅助函数..

于 2012-08-08T19:55:00.960 回答