首页 > 解决方案 > 从服务器接收 Observable 后返回 BehaviorSubject

问题描述

  getWatchlist(query: string): BehaviorSubject<IWatchlist> {
    this.search(query)
      .subscribe((searchResults: Observable<ISearchResults>) => {
        const watchlist = formatSearchResults(searchResults);
        this.watchlist$.next(watchlist);
      });
    return this.watchlist$;
  }

我有search进行 http 调用并返回的函数Observable。我search在另一个应该返回的函数中调用它BehaviorSubject。如您所见,最后一行return this.watchlist$;不等待search函数,它只是返回BehaviorSubject,然后我只是更新它watchlist$。我要做的是删除最后一行并watchlist$仅在收到search函数结果时返回。我试着做:

  getWatchlist(query: string): BehaviorSubject<IWatchlist> {
    return this.search(query)
      .subscribe((searchResults: Observable<ISearchResults>) => {
        const watchlist = formatSearchResults(searchResults);
        this.watchlist$.next(watchlist);
        return this.watchlist$;
      });
  }

但我有一个错误:Type Observable<BehaviorSubject<IWatchlist>>不能分配给类型 ` 那么我该如何解决这个问题呢?

标签: angulartypescriptangular2-observablesbehaviorsubject

解决方案


this.search(query).subscribe(...) 方法返回一个订阅,而您必须返回一个 BehaviorSubject。其次,您不应该从订阅事件中返回任何内容。您必须实例化一个新的 BehaviorSubject 并从 getWatchlist() 方法返回它,并且在订阅事件中您应该通过 next() 方法设置 BehaviorSubject。


推荐阅读