rxjs超时:区分过期时间和源错误

rxjs超时:区分过期时间和源错误,rxjs,observable,Rxjs,Observable,使用RxJS 6.5,我订阅了一个流,我想采取两种不同的行动: -当源代码出现错误时 -另一种情况是,当源发送数据超时时间过长时 这是我目前拥有的 source$.pipe timeoutWith5000,记录'timeout!', catchErrorlog“错误!” 订阅 函数logmsg{ console.logmsg; 回收废品; } 当我的源代码发出时间超过5000毫秒时,我会得到预期的结果:超时 但是,当我的源代码在5000ms之前抛出错误时,两行都会执行。似乎只要源没有发射,即使发

使用RxJS 6.5,我订阅了一个流,我想采取两种不同的行动: -当源代码出现错误时 -另一种情况是,当源发送数据超时时间过长时

这是我目前拥有的

source$.pipe timeoutWith5000,记录'timeout!', catchErrorlog“错误!” 订阅 函数logmsg{ console.logmsg; 回收废品; } 当我的源代码发出时间超过5000毫秒时,我会得到预期的结果:超时

但是,当我的源代码在5000ms之前抛出错误时,两行都会执行。似乎只要源没有发射,即使发生错误,也会触发timeoutWith

如何设置管道,使超时逻辑仅在实际时间已过时运行,而不是因为流因错误而中止


看起来您使用的正确操作符是timeout,而不是timeoutWith,我会解释

时间与意志同在——这不是你的需要

超时将-最适合您的需要/

在管道中使用超时应该如下所示:

source$.pipe(
  catchError(() => log('func error!')), // will log only when your source throws an error
  timeout(5000),
  catchError(() => log('timeout error!')) // will log only if your source as timed-out for 5000
).subscribe();