1

私は現在、JavascriptAngularJSを具体的に学んでいますが、その方法を理解できないことが 1 つあります。さらに見ていくとわかるように、私は「シーケンシャル」な考え方から自分の心を切り替えるのにも苦労しています。2 つのリクエストを作成し、両方が成功したときに関数を実行し
たいと考えています。$http.post()そのようなリクエストをネストすることで、なんとか機能させることができました:

$http.post(url, {something}).success(function (response) {
    $http.post(url, {something}).success(function (secondResponse) {
      myFunction();
    });
});

それは機能していますが、ネストされており、非同期ではなく、一般的に不十分です。これらのリクエストをそのようにすることが可能かどうか疑問に思います (次のコードが正しく機能しないことはわかっています)。

$http.post(url, {something}).success(function (response) { someKindOfFlag = true });    
$http.post(url, {something}).success(function (response) { anotherKindOfFlag = true });
if (someKindOfFlag && anotherKindOfFlag) { myFunction(); }
4

2 に答える 2

2

この場合の適切な解決策は、promise API を中継し、AngularJS $q サービス$q.all()(より正確にはそのメソッド) を使用することです。

$http サービスは、$http 関数呼び出しから promise を返すという意味で、すでに promise で動作します。

両方のリクエストが完了したときにコールバックを実行するには、次の方法でメソッドを$http使用できます。$q.all()

$q.all([$http.post(url, {something}), $http.post(url, {something})]).then(function(arrayOfResponses) {
  // success callback code goes here
});
于 2013-04-08T08:17:08.130 に答える
1

Javascript 全般、特に Angular で $q または promise について聞いたことがあるはずです。やりたいことを実現するには、$q API を使用する必要があります。

これがその方法です。サービスまたはコントローラーに $q を注入する必要があります (ただし、可能であれば、これをサービスに組み込むことをお勧めします!)。

var firstResponse = $http.post(url, {something});

var secondResponse = $http.post(url, {something});

$q.all([firstResponse,secondResponse]).then(function(data){
      //data[0] === firstResponseData
      //data[1] === secondResponseData 
      myFunction();
});
于 2013-04-08T08:15:23.460 に答える