0

Nodejs サーバーと通信するために Angular ページを作成しようとしていますが、問題が発生しました。

以前の ajax リクエストからのデータに依存する複数の Ajax リクエストを使用して機能させる必要があります。

したがって、Ajax リクエスト #1 は、他のすべての Ajax リクエストで使用されるデータを提供し、Ajax リクエスト #2 は、Ajax リクエスト #1 からのデータを使用して、Ajax リクエスト #3 が必要とするデータを取得します。

Angular は非同期であるため、次の ajax 呼び出しを行う前にスクリプトを最初のデータから待機させるにはどうすればよいですか?

id = ajax()

データ待ち

トークン = ajax(id)

データを待つ

ゲームトークン = ajax(id, トークン)

データを待つ

4

1 に答える 1

2

Chandermani は正しいです。必要な変数を必要なスコープで使用できるようにすることを忘れないでください。

var id,token,gametoken;
$http.get('http://host.com/first')
   .then(function(result){
       id=result;
       return $http.get('http://host.com/second/'+id);
    }
    .then(function(result){
        token = result
        return $http.get('http://host.com/third'+id+'/'+token);
    }
    .then(function(result){
        gametoken = result;
        //Do other code here that requires id,token and gametoken
    }

編集: 約束を連鎖させる必要はありません。後日呼び出しを行い、promise が解決されていることを確認したい場合は、$q.all(); を使用できます。

var id,token,gametoken;
var p1 = $http.get('http://host.com/first')
   .then(function(result){
       id=result;
    }

// Later on to make your new second call
 $q.all([p1]).then(function(){
      //Make second call knowing that the first has finished.
 }

$q.all() は配列を取るため、必要に応じて複数の promise を配置でき、それらがすべて解決されるまで待機します。

于 2013-11-04T05:38:43.390 に答える