当使用RxJS observables在可观察的返回后采取行动时,'do'和'finally'之间的差异是什么?

Tyl*_*ian 6 finally observable rxjs angular

关于RxJS dofinallyRxJS 之间的差异,我没有看到很好的文档.我的目标是仅在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');
    }
Run Code Online (Sandbox Code Playgroud)

defineWidth是一个依赖于Observable返回的数据的函数.我愿意接受建议并阅读有关替代方法的材料,以实现我想要的目标.

Gün*_*uer 8

do()为每个正常事件调用,不会修改数据流.它仅用于副作用.

finally()在最后一个事件之后或在出现错误之后调用一次.无论是成功还是失败,都会调用一次.

如果this.defineWidth()取决于this.tableData你不需要dofinally.只需在您将响应分配到的行之后添加呼叫this.tableData:

getData(choice): void {
    this.dataService.getTableData(choice, 'mainCalls.php')
        .subscribe(tableData => {
           this.tableData = tableData;
           this.defineWidth();
         }),
         err => {
           console.log(err);
         }
    );
}
Run Code Online (Sandbox Code Playgroud)