编辑:描述的bug在6.2.1版中消失了
我将一个项目从rxjs5迁移到rxjs6 (工作良好(!))迁移工具在rxjs包中。在某些情况下,我的错误处理(以前很好)没有捕捉到错误。
在使用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不起作用的例子:
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);
})输出:
NOT WORKING
ERROR: TypeError: You provided 'undefined' where a stream was expected.
You can provide an Observable, Promise, Array, or Iterable.发布于 2018-06-18 09:45:05
下面的代码工作正常,错误信息是打印在错误函数范围内的。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)
)https://stackoverflow.com/questions/50761948
复制相似问题