订阅 combineLatest 中的所有 observables
Posted
技术标签:
【中文标题】订阅 combineLatest 中的所有 observables【英文标题】:Subscribe to all observables in a combineLatest 【发布时间】:2020-01-23 06:59:03 【问题描述】:在我的代码中,我打开一个matDialog
允许提取 XLSX。
打开此matDialog
时,数据会加载到ngOnInit()
,这可能需要一些时间。
这就是为什么我使用combineLatest()
和filter()
允许我等待三个查询的结果以允许提取。
我现在想添加一个mat-progress-bar determinate
来查看提取的去向。
为此,我希望能够根据收到的每个结果修改我的变量 progress
。
所以我在每个请求上都使用了map(result => this.progress = this.progress + 30;
来增加进度。
它有效,但打破了我的combineLatest()
。进度停止在 90%,我找不到解决方案。
代码:
this.subscriptions$.add(combineLatest([
this.storeWallets.loadInvoiceExtractionProduct(this.selectedWallet).pipe(
//map(result => this.progress = this.progress + 30; ),
catchError(err =>
console.error(err.message);
return of(err);
)
),
this.storeWallets.loadInvoiceExtractionSupport(this.selectedWallet).pipe(
//map(result => this.progress = this.progress + 30; ),
catchError(err =>
console.error(err.message);
return of(err);
)
),
this.storeWallets.loadInvoiceExtractionTraining(this.selectedWallet).pipe(
//map(result => this.progress = this.progress + 30; ),
catchError(err =>
console.error(err.message);
return of(err);
)
),
]).pipe(
filter(results => results.every(res => !!res))
).subscribe(results =>
//this.progress = 100;
document.body.style.cursor = "default";
this.waitExtraction = false;
)
);
感谢您的帮助。
【问题讨论】:
【参考方案1】:这一行:
map(result => this.progress = this.progress + 30; ),
将获取每个结果并返回undefined,因为没有返回语句(因此filter
将过滤掉结果,并且不会运行订阅者)。将 map
替换为 tap
运算符,它应该可以工作。
【讨论】:
以上是关于订阅 combineLatest 中的所有 observables的主要内容,如果未能解决你的问题,请参考以下文章
关于 RxSwift/RxCocoa 与 combineLatest 绑定的问题
RxSwift。结合最新。并不是所有的 observables 都发出了