先に進む前に、パラメーターの配列のエラーをテストする必要がある関数があります。項目によっては、テストにサーバーへの呼び出しが含まれる場合と含まれない場合があります。
テスト結果を評価する前にすべてが終了するように、$q の配列を実装しました。$q.all を使用して配列を返しています。
私はすべての約束が解決されていることを知っています。なぜなら、私はそれぞれをステップスルーして解決を見ることができるからです。
最上位 .then:
$scope.BigTest().then(function(result){
//examine the array of results & then call the function we want to execute
// we never ever reach here
},
function(error){
// handle the error
// we never ever reach here either
});
$q,all() を使用した関数:
$scope.BigTest = function(){
var promises = new Array();
for (var x = 0; x < $scope.testingStuff.length; x ++){
var temp = $q.defer();
if ($scope.testingStuff[x].localTestingGoodEnough){
if (test){
temp.resolve(true);
}
else{
temp.resolve(false);
}
}
else{
var getServerStuff = ServerService.testServer($scope.testingStuff[x]);
getServerStuff.then(function(result){
// I've debugged through here and know this is successfully happening whenever necessary, and that the value is appropriate
temp.resolve(result.value);
},function(error){
temp.resolve(false);
});
}
promises[x] = temp.promise;
}
return $q.all(promises);
}
疑似コードに記載されているように、問題は、テストでサーバーへの呼び出しが必要な場合に、promise の配列全体が解決されないことです。
サーバー呼び出しが必要ない場合、セットは期待どおりに解決されます。
これが解決しない理由について何か考えはありますか? おそらく私は $q.all() を適切に使用していませんか?