2017-10-22 2 views
-1

以下のコードでは、変数xに応じて約束事の配列に関数を追加します。最後の条件では、関数を$ httpレスポンスの後に追加する必要があります。このコードは正しいですか? $q.allのすべての約束の実行は、$http関数が応答とともに返るまで待ちますか?

var promises = []; 

array.forEach(function(x){ 

    if (x==1) 
     promises.push(function1('aaa')); 
    else if (x==2) 
     promises.push(function2('bbb')); 
    else { 
      $http.get("url.htm").then(function(response) { 
       promises.push(function3(response)); 
      }); 
    } 
}); 

$q.all(promises).then(function(resultArray) { 
    // ..... 
} 

答えて

1

これは、AJAX応答が非同期であるため待機しません。

それは(?約束)何funciton1 & FUNCTION 2のリターンは明らかではないが、それはより多くの

var promises = []; 

array.forEach(function(x){ 

    if (x===1) 
     promises.push(function1('aaa')); 
    else if (x===2) 
     promises.push(function2('bbb')); 
    else { 
      promises.push($http.get("url.htm")) 
    } 
}); 

$q.all(promises).then(function(resultArray) { 
    // ..... 
} 
+0

はい、はfunction1,3、2と3のリターンの約束のようなものでなければなりませんが、あなたのソリューションにあなたが '起動していませんfunction3' – ps0604

+0

$ q.allコールバックで呼び出す必要があります –

関連する問題