两个Facebook api异步调用

时间:2012-08-08 17:20:37

标签: facebook facebook-graph-api facebook-javascript-sdk

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

FB.api(/箱) FB.api(/ ME /朋友)。

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

所以我的pesduocode是:

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

}

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

就像thiis:

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

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

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

}

两个警报都已执行。

我的问题: 1)有时我看到来自/我/朋友的警报首先执行,有些时候执行/我。我理解FB是异步的如何使ut sequentical ...如果我有很多FB.api调用(超过2)如何保持windows.location?如何控制异步功能

1 个答案:

答案 0 :(得分: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);
  }
});

这当然可以抽象成一些辅助函数。