使用switchMap时的rxjs6错误处理

使用switchMap时的rxjs6错误处理,rxjs,rxjs6,Rxjs,Rxjs6,编辑:描述的错误在6.2.1版中消失了 我使用RxJSTSLint包中的(运行良好的(!)迁移工具将一个项目从rxjs5迁移到rxjs6。在某些情况下,我的错误处理(以前工作正常)不再捕获错误 在使用switchMap时,范围和/或错误传播有什么新的内容吗?我怎样才能再次发现错误呢 下面是一个工作示例 Rx.of(undefined).pipe( tap(() => console.log("WORKING")), mergeMap(boom => boom), catc

编辑:描述的错误在6.2.1版中消失了

我使用RxJSTSLint包中的(运行良好的(!)迁移工具将一个项目从rxjs5迁移到rxjs6。在某些情况下,我的错误处理(以前工作正常)不再捕获错误

在使用switchMap时,范围和/或错误传播有什么新的内容吗?我怎样才能再次发现错误呢

下面是一个工作示例

Rx.of(undefined).pipe(
  tap(() => console.log("WORKING")),
  mergeMap(boom => boom),
  catchError(err => Rx.throwError("ERROR CATCHED"))
).subscribe((data) => {
  console.log(data);
},(err) => {
  console.log("ERROR:", err);
})
输出:

WORKING
ERROR: ERROR CATCHED
NOT WORKING
ERROR: TypeError: You provided 'undefined' where a stream was expected.
       You can provide an Observable, Promise, Array, or Iterable.
不起作用示例:

Rx.of("foo").pipe(
  switchMap(() => Rx.of(undefined).pipe(
    tap(() => console.log("NOT WORKING")),
    mergeMap(boom => boom),
    catchError(err => Rx.throwError("ERROR NOT CATCHED"))
  ))
).subscribe((data) => {
  console.log(data);
},(err) => {
  console.log("ERROR:", err);
})
输出:

WORKING
ERROR: ERROR CATCHED
NOT WORKING
ERROR: TypeError: You provided 'undefined' where a stream was expected.
       You can provide an Observable, Promise, Array, or Iterable.

下面的代码起作用,错误消息打印在错误功能范围内
mergemap
应该返回一个可观察值,但在本例中,故意忽略了返回未定义的值以触发错误

const { of, throwError } = require('rxjs')
const { switchMap, tap, mergeMap, catchError } = require('rxjs/operators')

of('foo').pipe(
   switchMap(val => of(undefined).pipe(
   tap(() => console.log('NOT WORKING')),
   mergeMap(val => val),
   catchError(err => throwError("ERROR NOT CATCHED"))
  ))
).subscribe(
   data => console.log('success', data),
   error => console.log(error)
)

如果您创建
Rx.of(未定义)
Observable,则
mergeMap(boom=>boom)
不会使sensecorrect!这就是重点。在某些情况下,在我的真实代码中,流数据(通常是mergeMap点处的数组)未定义,因此在第二个示例中未触发
catchError
。我删除了我以前的评论,要求创建一个问题,但我认为我不应该这样做。这看起来确实是一个值得讨论的bug或行为。请在RxJS回购中。哦,酷。看起来它已修复>=6.2.1。在6.2.0版本中,它会因未捕获的typescript错误而崩溃。@fastr.de我有6.4.0版本,但仍然使用相同的版本。我在switchMap中使用catchError和mergeMap。它对你有用吗?@yuva我对6.4.0也有同样的问题,你找到问题了吗