关于RxJS do
与finally
RxJS 之间的差异,我没有看到很好的文档.我的目标是仅在Observable返回数据时才采取行动,但看起来他们都会对失败采取行动.
do
说" 为可观察序列中的每个元素调用一个动作,并在可观察序列的优雅或异常终止时调用一个动作. "
observable可能返回多个元素?
finally
说" 在源可观察序列正常或异常终止后调用指定的操作".
我希望有人会解释是否重要,或者是否有更好的替代方法.
getData(choice): void { this.dataService.getTableData(choice, 'mainCalls.php') .do( () => this.defineWidth() ) .subscribe(tableData => this.tableData = tableData, err => { console.log(err); } ); } ngOnInit() { this.getData('getTableData'); }
defineWidth是一个依赖于Observable返回的数据的函数.我愿意接受建议并阅读有关替代方法的材料,以实现我想要的目标.
do()
为每个正常事件调用,不会修改数据流.它仅用于副作用.
finally()
在最后一个事件之后或在出现错误之后调用一次.无论是成功还是失败,都会调用一次.
如果this.defineWidth()
取决于this.tableData
你不需要do
或finally
.只需在您将响应分配到的行之后添加呼叫this.tableData
:
getData(choice): void {
this.dataService.getTableData(choice, 'mainCalls.php')
.subscribe(tableData => {
this.tableData = tableData;
this.defineWidth();
}),
err => {
console.log(err);
}
);
}