使用 switchMap 时的 rxjs6 错误处理
rxjs6 error handling when using switchMap
编辑:描述的错误在版本 6.2.1
中消失了
我使用 rxjs-tslint 包中的(运行良好(!))迁移工具将项目从 rxjs5 迁移到 rxjs6。在某些情况下,我的错误处理(以前工作正常)不再捕获错误。
关于范围界定 and/or 使用 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.
下面的代码有效,错误消息打印在错误函数范围内。 mergemap
应该是 return 一个可观察的,但对于这个例子,它被故意留给 return 未定义的值来触发错误。
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)
)
编辑:描述的错误在版本 6.2.1
中消失了我使用 rxjs-tslint 包中的(运行良好(!))迁移工具将项目从 rxjs5 迁移到 rxjs6。在某些情况下,我的错误处理(以前工作正常)不再捕获错误。
关于范围界定 and/or 使用 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.
下面的代码有效,错误消息打印在错误函数范围内。 mergemap
应该是 return 一个可观察的,但对于这个例子,它被故意留给 return 未定义的值来触发错误。
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)
)