在javascript和ajax中進行多個異步調用時,我遇到了麻煩。一切看起來像在同一時間開始在多個線程和輸出取決於它到達的時間。如何知道何時完成多個異步調用然後調用另一個命令?
電流輸出爲:
DONE
UpdateUserLocation...
UpdateUserFriends...
UpdateUserFriendList...
UpdateUserAlbum...
UpdateUserGroup...
但預期是
UpdateUserLocation...
UpdateUserFriends...
UpdateUserFriendList...
UpdateUserAlbum...
UpdateUserGroup...
DONE
我的代碼:
{...
HandleExtendAccessToken(accessToken, fbUserId, fbName, fbEmail, function(result){
if(result == true) {
console.log("DONE");
}
});
...};
function HandleExtendAccessToken(accessToken, fbUserId, fbName, fbEmail, callback){
FBExtendAccessToken.ExtendCurrentToken60Days(accessToken, fbUserId, fbName, fbEmail);
if(dayUpdateUserLocation == '') UpdateUserLocation();
if(dayUpdateUserFriends == '') UpdateUserFriends();
if(dayUpdateUserFriendList == '') UpdateUserFriendList();
if(dayUpdateUserAlbum == '') UpdateUserAlbum();
if(dayUpdateUserGroup == '') UpdateUserGroup();
if(dayUpdatePage == '') UpdatePage();
callback(true);
};
難道我錯了什麼東西?我如何解決它。謝謝
更新:
這是上面列表中的示例更新函數。我做了2個Ajax調用的函數:Facebook API AJAX獲取信息,另一個是AJAX將這些信息更新到我的服務器。當完成檢索的Facebook信息和更新服務器,我想顯示DONE或重定向用戶到另一頁:
function UpdateUserLocation(){
var userLocationIds = "";
var userLocationNames = "";
FB.api('/me/locations' + '?access_token=' + accessToken, function(response) {
var locationList = response.data;
var userLocationList = "";
if(locationList !=undefined && locationList.length != 0){
for (var index = 0; locationList.length > index; index++){
if(index == 0){
userLocationIds = locationList[index].place.id;
userLocationNames= locationList[index].place.name;
} else {
userLocationIds = userLocationIds + "-|-" + locationList[index].place.id;
userLocationNames = userLocationNames + "-|-" + locationList[index].place.name;
}
}
} else {
userLocationIds = "108153009209321";
userLocationNames = "Viet Nam";
}
//Save user location to server
FBData.UpdateFBData(fbUserId, userLocationIds,userLocationNames, 1);
console.log("UpdateUserLocation...");
});
}
你可以在這裏嘗試應用:http://www.webdoanhnghiep.biz/Facebook-Amplifier.aspx並感謝你的時間幫助我。
您應該在每個異步調用中設置一個計數器。如果當前計數器等於您所做的呼叫數量,那麼您可以輸出'完成'。 – 2012-12-23 14:14:43
所有那些'更新...'調用異步?告訴我們他們,以及你在哪裏調用'console.log'。 – Bergi