问题描述
在我的 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 运算符。它们的组合应该足够了。