Angular RxJS finalize():将最后发出的值传递给回调

Angular RxJS finalize():将最后发出的值传递给回调,angular,rxjs,angular-services,finalize,Angular,Rxjs,Angular Services,Finalize,在我的角度服务中,我有一个加载道具,我将它设置为真,作为获取数据方法中的第一件事。下载数据后,我想将加载设置为false。我是在finalize()中完成的: 链接主题: 编辑: kruschid在评论中回答了这个问题。我将使用tap操作符对emmited值执行您需要的任何操作,并保留finalize以将加载设置为false。您可能还需要检查最后一个运算符。它们的组合就足够了。既然collectionName与type相同,为什么不在finalize正文中使用后者呢?链接问题中解释的tap()

在我的角度服务中,我有一个
加载
道具,我将它设置为
,作为获取数据方法中的第一件事。下载数据后,我想将加载设置为false。我是在
finalize()
中完成的:

链接主题:

编辑:
kruschid在评论中回答了这个问题。

我将使用tap操作符对emmited值执行您需要的任何操作,并保留finalize以将加载设置为false。您可能还需要检查最后一个运算符。它们的组合就足够了。

既然
collectionName
type
相同,为什么不在
finalize
正文中使用后者呢?链接问题中解释的
tap()
有什么问题?我们可以争辩说,
finalize()
是在发出所有值之后调用的,因此当时不可能有值。若要找到更好的解决方案,请提供更多的上下文来解释为什么需要最后一个值。@kruschid谢谢!这是一个完美的解决方案,这正是我所需要的。@ChristophLütjen kruschid上面的答案正是我想要的。@ChristophLütjen尽管我仍然认为这个问题可能很有趣。是的,假设有人需要根据最后发出的值做一些事情,在所有值发出之后,在许多地方使用并订阅了一个方法。因此,在方法中编写要执行的操作,而不是在单独的订阅中编写,将更为舒适。
public fetch: (type: myType, page?: number) => Observable<any> = (
type: myType,
page: number = 1
  ) => {
    return this.serviceFor(type)
      .fetchList(page, this.queryParams)
      .pipe(
        map(({ data, meta }) => {
          return ({ collectionName: type, collection: data, meta })
        }),
        finalize(() => {
          this.loading.next(false)
        })
      );
  };
finalize((collectionName) => {
      switch (collectionName)
         ...
    })