【发布时间】:2019-05-04 14:40:51
【问题描述】:
我希望有一个 observable,当它取消订阅时它会调用一个函数,但只有当它被取消订阅时没有错误并且没有完成。我正在尝试构建的 observable 通常会与另一个 observable 竞争。我想要当另一个可观察的“获胜”时,这个执行一个函数。
我尝试了 finalize 运算符,但它总是执行。
播放.ts
import { timer } from "rxjs";
import { takeUntil, finalize } from "rxjs/operators";
import errorobs$ from "./errorobs";
export default function() {
return timer(10000).pipe(
takeUntil(errorobs$),
finalize(finalFunc)
);
}
function finalFunc() {
console.log("final function executed");
}
errorobs.ts
import { fromEvent } from "rxjs";
import { map } from "rxjs/operators";
export default fromEvent(document.getElementById("errorBtn"), "click").pipe(
map(() => {
throw new Error("my error");
})
);
我这里做了一个小demo https://codesandbox.io/s/q7pwowm4l6
单击开始以启动“可观察”。
点击取消让其他可观察者获胜
点击错误生成错误
【问题讨论】:
-
我希望它只在取消时调用函数。
标签: javascript rxjs rxjs6