如何使用RxJS延迟投掷者?
正如预期的那样,以下代码在5秒后发出42:如何使用RxJS延迟投掷者?,rxjs,rxjs6,Rxjs,Rxjs6,正如预期的那样,以下代码在5秒后发出42: const valueObservable = of(42).pipe(delay(5000)); valueObservable.subscribe((value) => console.log(value)); 但是,此操作会在订阅时立即引发版本错误: const throwingObservable = throwError(new Error('My Error')).pipe(delay(5000)); throwingObserva
const valueObservable = of(42).pipe(delay(5000));
valueObservable.subscribe((value) => console.log(value));
但是,此操作会在订阅时立即引发版本错误:
const throwingObservable = throwError(new Error('My Error')).pipe(delay(5000));
throwingObservable.subscribe((value) => console.log(value), (error) => console.error(error));
为什么会发生这种情况?如何延迟错误的抛出?Rxjs错误是一个异常,它会立即停止流,让您捕获它以对意外事件做出反应。我想除了使用
catchError
解决方案1:在抛出错误之前操作流
解决方案2:捕获错误,延迟流,然后再次调度它
我发现了一种(IMO)更简单的延迟抛出错误的方法:
const throwingObservable = of(42).pipe(
delay(5000),
switchMap(() => throwError(new Error('My Error')))
);
throwingObservable.subscribe(
value => console.log(value),
error => console.error(error)
);
我遇到了类似的问题,并发现了github问题: 更新到我的用例,它将是这样的:
const throwingObservable = throwError(new Error('My Error'))
.pipe(
materialize(),
delay(4000),
dematerialize()
);
throwingObservable.subscribe(console.log, console.error);
它在延迟4秒后抛出
const throwingObservable = of(42).pipe(
delay(5000),
switchMap(() => throwError(new Error('My Error')))
);
throwingObservable.subscribe(
value => console.log(value),
error => console.error(error)
);
const throwingObservable = throwError(new Error('My Error'))
.pipe(
materialize(),
delay(4000),
dematerialize()
);
throwingObservable.subscribe(console.log, console.error);