即使取消订阅,我如何确保调用 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/