2017-10-23 4 views
0

私は解決できないような面白い問題があります。私のアプリケーションは、さまざまなエンドポイントへのHTTP呼び出しを使用しており、その大部分は問題なく動作します。特に私に頭痛を引き起こしているものがあり、おそらく最も単純なものです。HTTP応答が反転した

私は、次のような戻り値を持つ関数を含むサービスを持っています。

return this._http.post(this.baseEndPoint + this.uri, postc, options) 
     .map(res => res.json()); 

どれが私にとってはかなり標準的です。奇妙なのは、エラー応答/コードで、成功/完了関数内のコードが実行されていて、成功した応答でエラー関数内のコードが実行されているということです。 APIからの応答は404と204として返されるので、私はそれらが適切に捕らえられると期待します。

this._service.function(param, param1) 
    .subscribe(
    error => { 
     console.log(error); 
    }, 
    () => { 
     console.log('lol wut'); 
    } 
); 

ここには何も特別なものはありません。また、私の要求が2つのネットワークコールを作成していることに気付いています.1つはPolyfillによって開始され、200のステータスで成功を示していますが、その後に404のステータスが「other」によってトリガされた別のコールが続きます。

私の質問は次のとおりです。それを解決し、適切な場所にキャッチさせるにはどうすればいいですか?なぜ2つの呼び出しが行われますか?

答えて

1

あなたが原因要求OPTIONS、角度作るの2つのネットワーク要求を見ている:順序が問題になる場合は

this._service.function(param, param1).subscribe(onNext, onError, onComplete); 

、あなたはまた、オブザーバーインターフェースを実装しそうのようなサブスクライブするためにオブジェクトを提供することができます要求のクロスオリジンの性質のためにプリフライトHTTP OPTIONS要求。 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS。 はまた、あなたのコールバックが間違った順序で

ここ
this._service.function(param, param1) 
     .subscribe(
      error => { // DONT CONFUSE with the name error, it can be any //name 
       console.log(error); 
      }, 
      () => { 
       console.log('lol wut'); 
      } 
     ); 

を書かれて、最初の引数のメソッドが成功すると呼ばれ、エラーおよび第三の第二は、私が考える情報です。 実際のコールバックは

this._service.function(param, param1) 
     .subscribe(
      data=>{ 
        console.log("status code is ",data.status);}, 
      error => { 
       console.log(error); 
      }, 
      () => { 
       console.log('lol wut'); 
      } 

     ); 

またはあなたの必要性につきようにする必要があります。

+0

興味深いことに、私はちょうど順序が問題ではないと考えていたと思うし、エラーが応答のタイプをキャッチすることによって働いたと思った。私はこれを試してみて、何が起きているのか見てみましょう。 – chrisjnas

+0

Observableライブラリからの購読の定義は次のとおりです ------------------ subscribe(next ?:(value:T)=> void、error ?:(エラー: any)=> void、complete ?:()=> void):サブスクリプション。 ---------------------- – TruckDriver

+0

ああ、完璧です。大変ありがとう! – chrisjnas

1

なぜ2つのネットワークリクエストが表示されているのかわかりませんが、引数名に基づいて、コールバックを元に戻したと思いますか? subscribeの最初の引数は、ストリーム上でnextの通知で実行される関数です.2番目の引数は、errorの通知で呼び出されます。 3番目は完了通知です。

this._service.function(param, param1).subscribe({ 
    next: x => console.log(x), 
    error: x => console.error(x), 
    complete:() => console.info('done!'), 
}); 
関連する問題