2017-12-05 5 views
0

これを理解しようとするとAngularとRxの新機能...私のアプリはUIイベントに反応し、Observableを返すHTTPサービスを呼び出します。私はそうのようにそれを購読する:switchmapと別のobservables

this.myXYZService.search(query) 
    .map(r => { // some code }) 
    .subscribe(r => { //some code }); 

は、そのイベントが再びトリガし、それが第一コールが終了する前に観察可能な新ブランドが返されます同じHTTPサービスへの2番目の呼び出しを行うことになり言います。

私はそれを理解しているので、マップの代わりにswitchMapを使用して古いObservableを破棄し、新しいObservableを操作できますか?それとも私はこれを間違って理解していますか?第1イベントが既にチェーンの購読部分に入った後に第2イベントがトリガーされた場合はどうなりますか?この場合、もはや切り替わることはありませんか? JSは同期しているので、2番目のイベントでもチェーンの処理が始まる前に、1番目のチェーン全体が実行されませんか?

Observablesのインスタンスが異なるため、私はすべてのことが混乱していると思います。どのようにRxがどのコールを切り替えるかを追跡していますか?それは関数名ですか?私は正確に何が起こるか上記の両方にswitchMapを使用する場合

this.myXYZService.search('abcd') 
    .map(r => { // some code }) 
    .subscribe(r => { //some code }); 

this.myXYZService.search('efgh') 
    .map(r => { // some code }) 
    .subscribe(r => { //some code }); 

:私は、コードの2つの別々のブロックを持っていると言いますか? 2回目のコールは最初にキャンセルされますか?

答えて

1

switchMapは、外側の観測値が放出されたときに前の内側の観測可能をキャンセルします。例えばこの場合

Observable.fromEvent(inputEl, 'keydown') // outer observable 
    .switchMap(event => { 
     let value = event.value; 

     return this.myXYZService.search(value); // inner observable 
    }) 
    .subscribe(res => { 
     // some code 
    }); 

ため、(fromEvent)を発する(入力要素のKeyDownイベントに)外側が観察するたびに、(myXYZService.search)内観察が呼び出され、前内側観察が解除されます。

2

あなたはできるだけ早く新しい検索用語が任意の進行中の検索コールが破棄/無視されますその後、到着したような...

searchTerms.switchMap( searchTerm => this.myXYZService.search(searchTerm) ).subscribe(...)

何かをしたいと思います。コールがまだ消えてしまったので、取り消しという言葉は使用しません。ただし、その結果は無視されます。

2番目の検索語が発行される前に最初の要求が返された場合、それはサブスクリプションに送信されます。そうでなければそれはしません。

+0

「キャンセル」という用語で通話が良好です。私は人々がこの用語をよく使うと思うのは、ネットワークタブにキャンセルと言われているからです。 – LLai

+0

ありがとう、この場合、searchTermsは外側の観測可能になります。 – SBKDeveloper

+0

@Eliseo switchMapとflatMapとconcatMapの間に良い[記事](https://tolikcode.github.io/post/rxjsMap/)があります。技術的にはこれらのすべてを使用して、オブザベーブルを連続して連鎖させることができます。しかし、内側の観察可能なものは、オペレータに基づいて異なって反応する。 switchMapを使用すると、前の内部観測値は、外部観測値が放出されたときに破棄されます。したがって、ある意味では、新しいものが作成されたとき(内側の観測可能なものが放出されたとき)、内側の観測可能なものを「切り換え」ます – LLai

関連する問題