javascript - 停止 Rxjs 观察者的下一次执行?
问题描述
我正在尝试使用 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')
});
我怎样才能实现这个代码来停止“这不应该打印”?
解决方案
推荐阅读
- javascript - 如何将 Javascript 代码导入 AngularJS
- swift - Swift 中的单元测试。是否足以覆盖 100%?
- python - 实现一般的反向传播
- colors - 从 allegro5 中的显示器获取像素颜色
- xml - 不能将子节点附加到父节点(VBA-XML)
- python - 选择具有非零值的列,这些列在 pandas 中共享索引,没有循环
- java - MPAndroidChart 每 X 输入刷新一次图表
- java - 易失性写入 = 易失性读取
- hdfs - 来自多个路径的 Nifi 列表文件并将它们路由到各自的目的地
- r - 从具有相同列结构的多个数据框中删除基于特定条件的列