0

先に進む前に、パラメーターの配列のエラーをテストする必要がある関数があります。項目によっては、テストにサーバーへの呼び出しが含まれる場合と含まれない場合があります。

テスト結果を評価する前にすべてが終了するように、$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() を適切に使用していませんか?

4

1 に答える 1

0

実際には正しく実行していたことがわかりましたが、「BigTest」のelseステートメントのすべてが角かっこで囲まれているコードにタイプミスがありました:「()」。これはエラーをスローしませんでしたが、サーバー呼び出しの解決をブロックしていました。ブラケットを削除すると、問題が解決しました。

于 2013-10-29T18:05:57.870 に答える