Javascript 是否停止下一次执行Rxjs observer?
我正在尝试Rxjs观察器的基本用例。这就是我正在做的:Javascript 是否停止下一次执行Rxjs observer?,javascript,node.js,rxjs,rxjs6,Javascript,Node.js,Rxjs,Rxjs6,我正在尝试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 no
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
我需要做的是停止下一次执行,即使我取消订阅,它也不会停止下一次执行
我也试过这样:
让认购
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')
});
如何实现此代码以停止“此不应打印”在使用
setTimeout
设置计时器后,您将不会使用取消订阅来阻止其执行
您需要手动清除超时
注意,您可以将超时保存在变量var myTimeout=setTimeout(f,ms)中代码>然后你可以取消然后清除超时(myTimeout)代码>
阅读更多:
使用setTimeout
设置计时器后,您将不会使用取消订阅
阻止计时器的执行
您需要手动清除超时
注意,您可以将超时保存在变量var myTimeout=setTimeout(f,ms)中代码>然后你可以取消然后清除超时(myTimeout)代码>
阅读更多:
这是一种使其与observer.error一起工作的方法,正如ABOS所述。事实上,这是他的例子,它是有效的
因此,为了便于记录,我用他在评论中的回答回答了这个问题
我只是想,如果有人在处理错误时遇到问题,则抛出错误,而不是按照需要的方式捕获和执行observer.error。这是让observer.error正常工作的方法,正如ABOS所述。事实上,这是他的例子,它是有效的
因此,为了便于记录,我用他在评论中的回答回答了这个问题
我只是想,如果有人在处理错误时遇到问题,抛出错误,而不是按照需要的方式捕获和执行observer.error。是的,我知道这些示例,实际实现只是异步代码的一个示例。。。所以我有异步和等待调用…是的,我知道这些例子,实际的实现就像异步代码的一个例子。。。因此,我使用的是异步并等待调用…尝试使用o.error('A error')
而不是实际执行error子句的泛型errorWell。。。但是它不会停止下一个要执行的异步代码“不会停止下一个要执行的异步代码”是什么意思?我可以看到“这不应该打印”没有打印。你能用你的代码提供一个答案吗?我用不同的方法运行了几次,它总是在这里打印控制台日志,您可以尝试使用o.error('A error')
而不是实际执行error子句的通用errorWell。。。但是它不会停止下一个要执行的异步代码“不会停止下一个要执行的异步代码”是什么意思?我可以看到“这不应该打印”没有打印。你能用你的代码提供一个答案吗?我用不同的方式运行了几次,它总是在这里打印控制台日志