【问题标题】:How can I get the value of the first observable in a chain of observables relationship如何获得可观察对象关系链中第一个可观察对象的值
【发布时间】:2020-03-10 00:28:42
【问题描述】:

我在使用 Angular 模型模式的应用程序中工作。

我想要实现的是:添加某种类型的文章后,我希望发生两件事:

  1. 重新加载报纸(这会刷新模型:model.Newspaper);
  2. 加载报纸后,我想重新加载该特定类型的文章列表(这会刷新模型:model.ArticlesOfSomeType);

无论出于何种原因,我都没有 Articles on Newspaper 的列表属性。

我有两个正在使用的 Observable:

artikelAdded$: Observable<{ newspaperId: number, artikelType: string}>;    

newspaperService.load 方法返回一个 Observable。比如说:

load(newspaperId):Observable<Newspaper> { 
   // observable is created from a Promise of getting the Newspaper
   // when the Promise is resolved, here the model.Newspaper is set
}

而且,“reloadArticlesOfType”将设置模型的其他部分:

reloadArticlesOfType(newspaperId, type) = {
     model.ArticlesOfSomeType = GetArticles(newspaperId, type);
}

我正在尝试做的事情是这样的:

this.actionCompletedService.artikelAdded$
    .pipe(
       map(artikelAdded => this.newspaperService.load(artikelAdded.NewspaperId)),
       switchMap(loadNewspaper$ => loadNewspaper$)
    )
    .subscribe(newspaper => this.newspaperService
                           .reloadArticlesOfType(newspaper.Id, artikelAdded.artikelType));

当然这不起作用,因为当我需要时,我的范围内没有 artikelAdded.artikelType。我不知道如何链接我的 Observables 以获得我想要的东西。我是使用 Angular 和 Observables 的新手,所以欢迎任何帮助。

谢谢!

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    首先,您可以通过删除switchMap(loadNewspaper$ =&gt; loadNewspaper$) 并直接使用concatMap 而不是map 作为第一个运算符来简化代码。

    然后,进入问题的核心,您可以将map 运算符通过管道传递到this.newspaperService.load(artikelAdded.NewspaperId) 的结果中,以返回artikelAddednewspaper

    代码看起来像这样

    this.actionCompletedService.artikelAdded$
        .pipe(
           concatMap(artikelAdded => this.newspaperService.load(artikelAdded.NewspaperId)).pipe(map(newspaper => ({newspaper, artikelAdded})))
        )
        .subscribe(newspaperAndArticle => this.newspaperService
                               .reloadArticlesOfType(newspaperAndArticle.newspaper.Id, newspaperAndArticle.artikelAdded.artikelType));
    

    这应该可以工作,因为您将一个包含newspaperarticle 的对象传递给subscribe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多