微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决RxJS finalize():将最后发出的值传递给回调

在我的 Angular 服务中,我有一个 loading 属性,我将 true 设置为在获取数据的方法中完成的第一件事。我想在下载数据后将 loading 设置为 false。我是在 finalize() 做的:

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)
        })
      );
  };

现在,我有三个 loading 道具,每个道具对应不同的类型。 我想通过 type(collectionName) 来完成。 由于 finalize() 不接受任何参数,那么还有其他方法可以获取最后发出的值并在流完成时对其进行处理吗?

finalize((collectionName) => {
      switch (collectionName)
         ...
    })

链接主题https://github.com/ReactiveX/rxjs/issues/4803

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

解决方法

我会使用一个 tap 操作符来做任何你需要的处理 emmited 值,并保持 finalize 只是为了将加载设置为 false。您可能还需要检查 last 运算符。它们的组合应该足够了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。