Typescript-在解构时修改数组值

时间:2018-12-17 11:57:46

标签: typescript rxjs

说我有这段代码:

const [val$, err$] = partition(result => ...)(httpSource$)
const valid$ = val$.pipe(
    tap(() => ...),
    map(result => ...)
)
const error$ = err$.pipe(
    tap(() => ...),
    map(result => ...)
)

是否可以通过在赋值之前修改val$返回值来避免创建err$partition变量?

1 个答案:

答案 0 :(得分:2)

通常不需要仅为观察错误而对Observable进行分区。相反,我们可以使用throwError创建函数来创建错误通知。错误通知是在您的subscribe调用中单独处理的(subscribe的第二个参数是在错误时调用的函数)。

自定义错误处理的典型示例如下:

$httpSource.pipe(
    mergeMap(res => 
        res.error ? 
            throwError(res.error) : 
            of(res.value)
    ),
    tap(next => ..., err => ...)
).subscribe(
     next => ..., 
     err => ...
)

我正在使用mergeMap,因为throwError创建了一个内部Observable,必须将其合并到外部Observable中。请注意,tapsubscribe都为错误处理函数使用了第二个参数。

有关错误通知的更多信息Observable Contract定义了可沿链传递的三种通知类型。其中之一是 error 通知,其定义为:

  

[错误通知]指示Observable已终止,并带有指定的错误情况,并且将不再发射任何物品

捕获和重新抛出错误:如果在Observable链中出现错误通知,我们可以使用catchError优雅地捕获该错误并将其转换为其他通知:

$httpSource.pipe(
    catchError(err => throwError(new CustomError(err)))
).subscribe(
     next => ..., 
     err => ...
)