Javascript 完成$。时调用函数
如果我在Chrome控制台中运行showFriends()函数,我可以看到数据。但是在代码中,我在$之后调用showFriends()。每个函数都失败,因为它似乎是异步运行的 我尝试在$之后链接.promise().done(showFriends();每个函数,但也失败了 有什么想法吗Javascript 完成$。时调用函数,javascript,Javascript,如果我在Chrome控制台中运行showFriends()函数,我可以看到数据。但是在代码中,我在$之后调用showFriends()。每个函数都失败,因为它似乎是异步运行的 我尝试在$之后链接.promise().done(showFriends();每个函数,但也失败了 有什么想法吗 var myApp = {}; myApp.fbFriends = []; function showFriends() { console.log(myApp.fbFriends); } functi
var myApp = {};
myApp.fbFriends = [];
function showFriends() {
console.log(myApp.fbFriends);
}
function getFriends() {
FB.api('/me/friends?fields=birthday', function(response) {
var friendsBirthdays = response.data;
friendsIdArray = friendsBirthdays.map(function(user) { return user.id });
createFriendsArray(friendsIdArray);
});
function createFriendsArray(friendsIdArray) {
$.each(friendsIdArray, function(index, value) {
FB.api(value.toString(), function(response) {
myApp.fbFriends.push(response);
});
});
showFriends();
}
}
如果没有其他内容,您可以在每次推送后比较FriendArray和myApp.fbFriends的长度,如果它们相同且大于零,请运行
showFriends()
。这将确保在最后一次迭代后显示朋友
比如说:
$.each(friendsIdArray, function(index, value) {
FB.api(value.toString(), function(response) {
myApp.fbFriends.push(response);
if (myApp.fbFriends.length == friendsIdArray.length)
showFriends();
});
});
每个
都不是异步的,FB.api
调用可能是异步的。您也可以使用done()
jquery@rockStar:应该怎么做?在调用.done
之前,您需要一个承诺。这将是.promise().done(//此处的函数)
@rockStar:那么你在哪里调用.promise
呢?还有,你读过OP写的吗?“我试过在$之后链接.promise()。完成了[…]。每个函数都失败了”如果你能提供一个完整的例子,你就说服了我。+1我想建议延迟对象/承诺,但这会减少很多开销。承诺在以后可以很好地解耦代码。是的,对于像这样简单的事情,比较长度是可以的……但是对于任何复杂的事情,我都会同意承诺。谢谢!谢谢!Ps:实际上是w我要做的就是像showFriends(response)一样传递响应,这样我就可以显示可用的朋友。