2017-06-29 4 views
0

this answer現在、リクエストが成功しなかったのにタイムアウトしてもデータを返すサービスを作成しようとしています。anglejsのデータを返すタイムアウトハンドラー

this.getStatus = function() 
    { 
     var timeoutPromise = $timeout(function() { 
      canceler.resolve(); 
      console.log("Timed out"); 
     },250); 

     var canceler = $q.defer(); 

     $http.get("data.js", {timeout: canceler.promise}).success(function(data){ 
      console.log(data); 

      $timeout.cancel(timeoutPromise); 

      return data; 
     }); 
    }; 

これは、リクエストがタイムアウトした場合や、いくつかのプレースホルダのデータに成功した場合$http要求にサービスを

それは応答のいずれかからデータを返す必要があり

var promises = [ 
    firstService.getStatus(), 
    secondService.getStatus(), 
    thirdService.getStatus() 
]; 

$q.all(promises) 
    .then(function (serviceResults) { 
     //process Data in case of success 
     console.log("Result First Service: "+ serviceResults[0]); 
     console.log("Result Second Service: "+ serviceResults[1]); 
     console.log("Result third Service: "+ serviceResults[2]); 
    }) 
    .catch(function() { 
     //process Mock data in case of Failure 
    }); 

と呼ばれる方法です。
リクエストがタイムアウトするとデータを返すことはできますか?

+0

リクエストを実行中に特定の時間にデータが届いたときに、そのデータを表示したいのはなぜですか?データがあなたのタイムアウトよりも時間がかかったり、時間がかかったりするとどうなりますか? 'catch'を使ってリクエストが失敗したかどうかを知ることができます。' .catch(function(response){}) 'はそれを処理したり、リクエストが失敗したと見なしたりします。 – MrNew

答えて

0

あなたは可能性があり:リクエストが成功した場合

this.getStatus = function() { 
    var deferred = $q.defer(); 
    var timeoutPromise = $timeout(function() { 
     deferred.resolve(
      // MOCKED DATA HERE 
     ); 
     console.log("Timed out"); 
    }, 250); 

    $http.get("data.js", {timeout: canceler.promise}).then(function(data){ 
     $timeout.cancel(timeoutPromise); 
     deferred.resolve(data); 
    }).catch(deferred.reject); 

    return deferred.promise; 
}; 

この方法で、それはレスポンスデータを解決します。タイムアウトした場合、それは模擬データで解決されます。タイムアウト前に別のエラーが発生した場合、応答エラーで約束を拒否します。

関連する問題