外部可观察对象永远不会完成或最终确定

Outer observable never complete or finalized

我有两个可观察对象。我如何顺序执行它们并一个接一个地获得完成的事件? 我试过 concatMap,但它似乎没有像我预期的那样工作。

    this._activatedRouteService.queryParams
      .pipe(
        concatMap((params) => {
          console.log('start');
          if (typeof params['q'] === 'string') this._searchQuery = params['q'];
          else this._searchQuery = null;

          return this._postService
            .searchPosts(this._searchQuery!)
            .pipe(finalize(() => console.log('inner finalize')));
        }),
        finalize(() => {
          console.log('outer finalize');
        })
      )
      .subscribe(
        (response) => {
          this._posts = response?.data ?? this._posts;
        },
        (error) => {
          if (error instanceof HttpErrorResponse) {
            this._snackBarService.open(
              'Failed to fetch posts.\n' +
                (error.error?.message ?? 'Unknown error.'),
              undefined,
              {
                duration: SnackBarConfig.ERROR_DURATIONS,
              }
            );
          } else {
            this._snackBarService.open(
              'Failed to fetch posts.\nUnknown error.',
              undefined,
              {
                duration: SnackBarConfig.ERROR_DURATIONS,
              }
            );
          }
        },
        () => {
          console.log('outer complete');
        }
      );

但是 outer finalizeouter complete 从未被调用。

从未记录 outer finalize 的原因是 _activatedRouteService.queryParams 从未完成。这是一个热门的可观察对象。

如果你希望在执行一次内部可观察对象后完成可观察对象,我建议使用 take() 运算符。在发送完整信号之前,它将“获取”从可观察对象发出的任意数量的值。

尝试在 concatMap() 之前的行中添加 take(1),