我有一个应用程序,我必须
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?如何控制异步功能
答案 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);
}
});
这当然可以抽象成一些辅助函数。