如何在发生错误后保持 Rxjs 可观察性(忽略错误)

问题描述 投票:0回答:1

我将一些值发送到 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
javascript angular typescript rxjs
1个回答
0
投票

是的,当

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
处理错误。

© www.soinside.com 2019 - 2024. All rights reserved.