2016-06-02 6 views
0

私のイオン性アプリ私はデータサービスを使用してデータを取得します。時々、サービスからの角度/イオンポストで 'ヌル'を受け取る - httpコールを繰り返す方法?

ウェブビュー(ionic serve)では、通話は常に良好です。しかし、iosデバイスでテストすると、時にはnullデータが返されます(エラーコールバックからの応答)。

なぜこのようなことが起こっているのかわかりませんが、データが返されます。もう一度クリックすると、データが受信されます。それは10回のうち1回起こります。だから私がしたいことは、データが受信されるまで呼び出しを繰り返すことですが、私はこのための最善の方法を知っていません。ここに私のコード

は状態解決である:

ためのサービスで
  resolve: { 
       getNewOrders: function (OrderService) { 
        //get new orders 
        OrderService.setNewOrders(); 
       } 
      } 

this.setNewOrders = function() { 
    $ionicLoading.show({ template: '<ion-spinner icon="ios"></ion-spinner><p style="margin: 5px 0 0 0;">Getting new orders..</p>'}); 
    newOrders = false; 
    return $http({ 
     url: api_url + "/get-new-orders", 
     method: 'POST', 
     headers: {'Content-Type': 'application/json; charset=UTF-8'} 
    }).then(function(response) { 
     if (response.data.status == 'success') { 
      if (response.data.returnData.length > 0) { 
       newOrders = response.data.returnData; 
      } 
     } 
     if (response.status == 'error' || response.status == 'tokenerror') { 
      AppService.error(response.status, response.errorMessages); 
     } 
     $ionicLoading.hide(); 
     return response.data; 
    }, 
    function(response) { // Error callback 
     //alert('ERROR - RELOAD DATA '+response); 
     console.log('ERROR - RELOAD DATA '+response); 
     setNewOrders(); //<<HERE I WANT TO REPEAT THIS FUNCTION IF NULL DATA IS RECEIVED 
     $ionicLoading.hide(); 
    }); 
} 

ので、エラーコールバックに、私は、データを取得するためにHTTP呼び出しをリロードします。

なぜnullが返されるのかわかりませんが、呼び出しを繰り返すとデータが再び取得されることはわかりません。だから私はちょうど私がちょうど受信されたユニットのデータを受信することをやり直すのは難しい。

は、しかし、私はあなたがあなたのアプリケーションをクラッシュに終わるかもしれないとして、再帰呼び出しを行うことをお勧めされていないこの

答えて

0

を行う方法を知りません。それが10回に1回のデータを取得しない場合、何か間違っている必要があります、あなたはそれを修正する必要があります。あなたはこのハックを使う、という場合は、エラーハンドラからの約束を返す場合は、その約束の結果は、元の約束の結果になります方法

if(count< 5)  
setNewOrders(count + 1); 
+0

setNewOrders();エラーコールバックを受け取ったときに実行されない – rZaaaa

+0

(response.data.returnData.length <1){ if(count <5) setNewOrders(count + 1); } –

0

をリコールして、その後のparamsにintegar渡す、とすべきです。

function(response) { // Error callback 
    //alert('ERROR - RELOAD DATA '+response); 
    console.log('ERROR - RELOAD DATA '+response); 
    return setNewOrders(); 
} 

、次の呼び出しが成功した場合response.data値は、呼び出しの連鎖を通じてバックpropogateます:それが何を意味するのか

は、エラーハンドラが再帰呼び出しの結果を返すべきであるということです。

しかし、Haseebは、カウンタを使用して再帰できる回数を制限する必要があることが正しいとしています。

+0

これを試しましたが、コンソールログが表示され、コールは繰り返されません – rZaaaa

関連する問題