RxJS:确保即使在取消订阅后也会触发 "tap"

标签 rxjs

即使取消订阅,我如何确保调用 Tap 运算符?想象一下以下情况:

function doUpdate() {
    return this.http.post('somewhere', {})
        .pipe(
            tap(res => console.log(res))
        )
}

const sub = doUpdate().subscribe(res => /* do something with res */);
setTimeout(() => sub.unsubscribe(), 1000)

在这种情况下,我只是想阻止执行订阅操作,但我想确保触发控制台日志,即使请求执行时间超过 1000 毫秒(在这种特殊情况下,我甚至也不希望 POST 被取消)。

最佳答案

使用 Finalize() 运算符,尽管当 observable 完成时也会调用它

function doUpdate() {
    return this.http.post('somewhere', {})
        .pipe(
           finalize(() => console.log(res))
        )
}

一些代码来演示这个想法: https://stackblitz.com/edit/rxjs-playground-test-m9ujv9

关于RxJS:确保即使在取消订阅后也会触发 "tap",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59084247/

相关文章:

javascript - Rxjs : understanding expand operator

angular - Angular 在哪里为 *ngIf 定义 "as local-var"行为?

javascript - 可观察中的数据集未在模板中更新

javascript - Observables 的 Angular HttpClient 默认错误函数

javascript - RxJS 取消嵌套回调

javascript - 为什么RxJS运算符过滤和映射大尺寸数组比Javascript数组方法更快?

javascript - 无法在anglar4中导入RX

javascript - AngularFirebaseAuth : Calling server api just after firebase auth?

angular - 如何在 Angular 的应用程序级别创建全局计时器?

angular - 返回单个字符的 Switchmap - Angular