0

angularHttpクラスを拡張するクラスがあります。それを と呼びましょうMyHttpMyJwtHttpクラスを拡張するクラスもありMyHttpます。

応答をjsonとして返すことができるようにしたいのですが、問題は、次のようなことをしている場合です:

myJwtHttp.request(..).map(res=>res.json()

requestメソッドの実装は次のとおりです。

class MyHttp extends Http {
    request(url,...){
        ..
         ..
    return super.request(url).subscribe(res=> doSomething(res))
    }
}

ここでの問題は、関数がクラスmapのサブスクライバーの前に呼び出されることです。MyHttpこれにより、の入力がdoSomething(res)json になり、応答自体ではなくなります。

lastの代わりに使用してみmapましたが、リクエストの呼び出し元に json が返されません。

この問題を解決する方法はありますか?

4

1 に答える 1

0

MyHttpクラス内でリクエストを処理したい場合はdo、対応するオブザーバブルをサブスクライブする代わりに、演算子を使用します。

class MyHttp extends Http {
  request(url,...) {
    (...)
    return super.request(url).do(res=> doSomething(res));
  }
}

あなたの場合、requestメソッドはオブザーバブルを返しませんが、subscribeメソッドの呼び出しに対応するサブスクリプション オブジェクトを返します。

rxjs のドキュメントから:

監視可能なシーケンス内の各要素に対してアクションを呼び出し、監視可能なシーケンスの正常な終了または例外的な終了時にアクションを呼び出します。

このメソッドは、メッセージ ストリームを傍受してパイプライン上のメッセージに対して任意のアクションを実行することにより、クエリ動作のデバッグ、ロギングなどに使用できます。

実行順序に関しては、の実装は正確にはわかりませんMyJwtHttpが、map演算子がMyHttpandMyJwtHttpクラスの外で使用されている場合、関連するコールバックは JSON コンテンツではなく、応答オブジェクトを受け取る必要があります。

于 2016-03-23T22:17:34.293 に答える