我将一些值发送到 rxjs 管道,然后进行订阅。如果是
error
,我想忽略它们并继续剩余的输入。
of('foo', 'bar', 'error', 'bazz', 'nar', 'error', 'car').subscribe(...)
所以我这样做了:
async function failIfError(item: string) {
if (item === 'error') throw new Error('HTTP 500'); // Some error we cant control
return item;
}
of('foo', 'bar', 'error', 'bazz', 'nar', 'error', 'car')
.pipe(
concatMap((item) => failIfError(item)),
catchError((error) => of(null))
)
.subscribe((val) => console.log('value:', val));
Stackblitz:https://stackblitz.com/edit/rxjs-pfdtrr?devToolsHeight=33&file=index.ts
这是实际输出:
value: foo
value: bar
value: null
如何修改此代码,使其忽略错误(使用
null
)并继续执行?这样输出看起来像:
value: foo
value: bar
value: null
value: bazz
value: nar
value: null
value: car
是的,当
failIfError
发生错误时,catchError
返回 null
并停止进程。因此,请在 form
函数中使用 concatMap
运算符。
请使用以下代码
of('foo', 'bar', 'error', 'bazz', 'nar', 'error', 'car').pipe(
concatMap((item) => from(failIfError(item)).pipe(catchError((error) => of(null)))))
.subscribe((val) => console.log('value:', val));
from(failIfError(item))
它将作为Observable返回,您可以使用catchError
处理错误。