Я хочу заметить, что при отписке он вызывает функцию, но только тогда, когда отписался без ошибок и без завершения. Наблюдаемое, которое я пытаюсь построить, обычно сопровождается другим наблюдаемым. Я хочу, когда другой наблюдаемый "выигрывает", этот выполняет функцию.
Я пытался завершить оператор, но он выполняется всегда.
playback.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");
})
);
Я сделал небольшое демо здесь https://codesandbox.io/s/q7pwowm4l6
нажмите кнопку Пуск, чтобы начать «наблюдаемое».
нажмите "Отмена", чтобы получить другой наблюдаемый выигрыш
нажмите на ошибку, чтобы создать ошибку