如何使用RxJS延迟投掷者?

如何使用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

正如预期的那样,以下代码在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));
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);