0

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 呼び出しを行う関数の 1 つは、情報を取得するための Facebook API AJAX であり、もう 1 つの関数は、それらの情報をサーバーに更新するための 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そして、私を助けてくれてありがとう。

4

1 に答える 1

0

jQueryは、一連のメソッドを実行した後、ある種の完了したコールバックを実行できるようにする遅延オブジェクトを導入します。

http://api.jquery.com/category/deferred-object/

http://api.jquery.com/deferred.done/

http://api.jquery.com/deferred.fail/

async.jsは、一連の非同期コマンドとそれに続く単一のコールバックを実行するための別のライブラリです。

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);

async.series([
    function(){ ... },
    function(){ ... }
]);
于 2012-12-23T14:34:53.850 に答える