7

AngularJSの関数を介して URL への不明な量の API 呼び出しを呼び出し、get()それらすべてをモデル ($scope変数) に追加する方法はありますか。これまでに行ったことは次のとおりです。

if(theUIDS != "") {
    var myDropbox = [];

    for(i = 0; i < theUIDS.length; i++) {
        var temp = {};

        temp.uid = theUIDS[i];

        $http({ url: '/dropbox/accounts/get', method: 'GET', params: { uid: theUIDS[i] }}).success(function(acctData) {
            temp.accountInfo = acctData;
        });

        $http({ url: '/dropbox/files/get', method: 'GET', params: { uid: theUIDS[i] }}).success(function(fileData) {
            temp.files = fileData;
        });

        myDropbox.push(temp);
    }

    $scope.dropboxAccounts = myDropbox;
}

UID があるかどうかを確認し、それぞれに対して 、オブジェクト、オブジェクトの順に入力されたオブジェクトを作成しtempます。オブジェクトを設定したら、それを配列にプッシュします。ループが終了したら、dropboxAccounts モデルを変数 inに設定します。私は Angular を初めて使用しますが、これが少なくとも正しい考えであると確信しています。幸いなことに、次のデータを正しい順序で取得しています。uidaccountInfofilestempmyDropboxmyDropbox$scope

{"uid":"332879"}
{"uid":"155478421",
    "accountInfo":{
        "country":"US",
        "display_name":"Patrick Cason",
        "name":"Second Dropbox",
        "quota_normal":1174504,
        "quota_shared":0,
        "quota_total":2147483648,
        "referral_link":"https://www.dropbox.com/referrals/NTE1NTQ3ODQyMTk?src=app9-203957",
        "uid":155478421},
    "files":[{
        "created_at":"2013-04-17T15:13:46Z",
        "directory":true,
        "dropbox_user_id":26,
        "fileType":"Folder",
        "id":198,
        "name":"Photos",
        "path":"/Photos",
        "rev":"10edb44f9",
        "size":"-",
        "updated_at":"2013-04-17T15:13:46Z"}]
}

奇妙なことに、私の UID の 1 つだけが更新されます。2 つの UID があるため、ループが正しく実行されていることがわかります。ループの開始時にアラートを出すと、2 つのループが発生します。2 番目が入力されていないと思う理由は、プッシュ ステートメントが両方の約束が通過するのを待っていないためです。各 AJAX 呼び出しが完了するのを待ってから変数に代入myDropboxするにはどうすればよいですか?$scope

4

1 に答える 1