【问题标题】:return BehaviorSubject after receive Observable from a serveer从服务器接收 Observable 后返回 BehaviorSubject
【发布时间】:2018-04-29 11:28:41
【问题描述】:
  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。我在另一个应该返回BehaviorSubject 的函数中调用了这个search。如您所见,最后一行return this.watchlist$; 不等待search 函数,它只返回BehaviorSubject,然后我只更新watchlist$。 我要做的是删除最后一行并仅在收到search 函数的结果时返回watchlist$。 我试着做:

  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&lt;BehaviorSubject&lt;IWatchlist&gt;&gt; 不能分配给类型 ` 那么我该如何解决这个问题?

【问题讨论】:

  • 这只是好奇,我想解释一下,因为你想返回一个 BehaivorSubject。返回一个简单的 Observable 不是更好吗?

标签: angular typescript angular2-observables behaviorsubject


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2017-07-27
    相关资源
    最近更新 更多