Я пытаюсь использовать базовый вариант использования наблюдателя Rxjs.Вот что я делаю:
const { Observable } = require('rxjs');
Observable.create(o => {
setTimeout(() => o.next('hi'), 1000);
setTimeout(() => { throw new Error('A mistake') }, 1500);
setTimeout(() => o.next('this should not print'), 2000) }
).subscribe({
next: x => console.log(x),
error: y => console.log('error', y),
complete: () => console.log('done')
});
Результат этого следующий:
> hi
Error: A mistake
at Timeout.setTimeout [as _onTimeout] (repl:1:89)
at ontimeout (timers.js:498:11)
at tryOnTimeout (timers.js:323:5)
at Timer.listOnTimeout (timers.js:290:5)
> this should not print
Что мне нужно сделать, это остановить выполнение следующего, и даже еслиУ меня unsubscribe
моя подписка, она не останавливает следующее выполнение.
Я тоже так пробовал:
давай подписку;
let source = Observable.create(o => {
try {
setTimeout(() => o.next('hi'), 1000);
setTimeout(() => { throw new Error('A mistake') }, 1500);
setTimeout(() => o.next('this should not print'), 2000)
} catch (e) {
subscription.unsubscribe();
return 'error';
}
});
subscription = source.subscribe({
next: x => console.log(x),
error: y => console.log('error', y),
complete: () => console.log('done')
});
но шансов нет ...это не остановило.
То, что у меня есть, так как код не просто установлен тайм-аут У меня есть асинхронный и ожидающий код, подобный этому:
let subscription;
let source = Observable.create(async o => {
try {
o.next(await anEvent());
o.next(await anEventThatThrowsAnException());
o.next(await anEventThatIWantToAvoidDueToTheException());
} catch (e) {
subscription.unsubscribe();
return 'error';
}
});
subscription = source.subscribe({
next: x => console.log(x),
error: y => console.log('error', y),
complete: () => console.log('done')
});
Как я могу добиться этого кода, чтобы остановить "этоне должен печатать "?