0

こんにちは、サブジェクトのサブスクリプションと検索呼び出しに問題があります。現在の呼び出しを優先して、前の呼び出しをキャンセルしたい。以前のスレッドを検索しましたが、答えを見つけることができませんでした。

switchMap() を使用することになっていることはわかっていますが、うまくいきません。状態に関係なく、すべての通話を継続します。私が設定している応答を返さないという点で、私が物事を設定した方法に関係している可能性があると思います。したがって、単一の観察可能な参照はありません..?

すべての助けに感謝します!

以下のコードを参照してください。

ngOnInit() {
// I subscribe to the Subject Observable here
this._searchService.quickSearch$
  .pipe(
    debounceTime(1000),
    distinctUntilChanged()
  )
  .subscribe(
    // when value has changed I call runSearch
    (queryString) => {this.runSearch(queryString);
  }
  );
}

検索を実行:

runSearch(searchString: any) {
this.quickSearch.runSearch(searchString).pipe(
   //Not working as expected
    switchMap(() => {
      console.log('switchMap has bee fired');
      return this.quickSearch.runSearch(searchString);
    })
).subscribe(
    (response) => {
    //  set the two way bind here
    this.apiResponse = response;
  },
  (error) => {
    console.log('ERROR!!!');
  },
  () => {
    // this is fired when the observable is closed
    console.log('I have been unsubscribed');
  }
  );
 }

クイック検索サービス:

  runSearch(search: string): Observable<QuickSearch[]> {

   ...

    return this.http.get<QuickSearch[]>(this.api.url, { params: param, headers: header })
      .pipe(
        map((data: any) => {
             return data.map((item: any[]) => this.adapter.adapt(item));
        }
        ),
        catchError(error => error)
      );

  }

ありがとう

アップデート

私はまだこの質問に対する答えを見つけていません。ですので、書き直してみるつもりです。

これには5つの部分があります:

    Input box ([])-> 
    rxjs-Subject (input-text)-> 
    runSearch(input-text) -> [ handles response ] 
    _service.runSearch(input-text) ->
    http().get(input-text) => response

入力ボックスが変更されると、検索サービスがサブスクライブされている検索の実行が呼び出され、これは返されません

4

1 に答える 1