2017-04-12 14 views
1

角度アプリケーションでHTTP呼び出しをネストしました。

$scope.saveAsPaused = function() { 

       var cmsResponse = saveAtCMS(); 
       cmsResponse.then(function(data){ 

         saveAtRe(data).then(function(data){ 

           successSave(data); 
         }, function(data, isOffDel){ 

           delOnFailRE(data); 
         }); 
       }); 
     } 

var saveAtRe = function(data) { 
      return $http.post('/pause', data); 
     } 

バックエンドのコードsaveAtRe機能で

@POST 
    @Produces("application/json") 
    @Path("/pause") 
    public Response createInPauseState(CampaignConfigurationBeans camp) { 

     return Response.status(502).entity("false").build(); 

    } 

JAVA

で、私は、バックエンドからの502のステータスコードを返していますが、それでも、私のアプリケーションはsuccessSave関数を呼び出しています。

誰でも私が間違っていることを説明できますか?

+0

に役立つかもしれません。 –

+0

は、502の代わりにResponse.Status.BAD_GATEWAYを試してみることができます。私はそれがうまくいくとは思っていませんが、doc http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/ Response.Status.html#BAD_GATEWAY、502 Bad Gatewayとは、502だけではないと言います。 –

答えて

1

従来のsuccess \ failureアプローチではなく、then()メソッドの使用を検討してください。上記の記事で

方法と thenの引数 success/ errorとの違いは、エンドれる答えの一つを見てみましょう:アンギュラHttpPromise - 約束をよく読んでか、違いを説明し、この記事をチェックアウトを持っています)(その後、()メソッドともキャッチを使用した例で示します

(それを試してみると何がキャッチで終わるされている場合、それはあなたがより一貫性のある結果が得られるかどうかを確認)

+0

OPは '.success'ではなく' .then'を使用します – tanmay

0

Angular Docsから

と299の間

応答ステータスコードが成功 状態とみなされ、エラーコールバックをトリガすることが期待

502ステータスコードと呼ばれている成功コールバックになり、あなたのコードは大丈夫に見えます。成功したコールバックで返されたステータスを2回確認できますか?

saveAtRe(data).then(function(data){ 
          console.log(data.status); 
        }, function(data, isOffDel){ 
          delOnFailRE(data); 
        }); 

受信状態が502である場合、それは一般的な動作ではなく、追加の角度のHTTPインターセプターは、あなたのコードに適用される場合、私はチェックします。

+0

はい、状態は502.Iとして確認されています。 – user3587856

+0

[Angular's code](https://github.com/angular/angular.js/blob/master/src/ng/http.js)はかなり簡単です。 'function isSuccess(status){ return 200 <=ステータス&&ステータス<300; } 'アプリケーションのカスタムロジックが適用されている必要があります。 – udalmik

0

これは理解するのに役立ちますこと、uがあまりにもあなたのバックエンドのコードを共有することができます

$scope.saveAsPaused = function() { 
       var cmsResponse = saveAtCMS(); 
       cmsResponse.then(function(data){ 
         saveAtRe(data).then(function(data){ 
           successSave(data); 
         }, function(data, isOffDel){ 

           delOnFailRE(data); 
         }); 
       }); 
      } 
     var saveAtRe = function(data) { 
      var q=$q.defer(); 
      $http.post('/pause', data).then(function(data) 
      { 
       q.resolve(data); 
      },function(error){ 
       q.reject(error); 
      }) 
      return q.promise;; 
     } 
+0

これは反パターンです。 '$ http.post(...)'自体が約束を返します – tanmay

+0

他のものに約束を入れて、違いは何ですか? – udalmik

+0

@gitaram、はい以前私はこのパターンだけを使用していましたが、うまくいきました。しかし、なぜ私の質問で言及したように動作していないのか分かりませんでした。 – user3587856

関連する問題