Typescript-在分解结构时修改数组值

Typescript-在分解结构时修改数组值,typescript,rxjs,Typescript,Rxjs,假设我有一段代码: const [val$, err$] = partition(result => ...)(httpSource$) const valid$ = val$.pipe( tap(() => ...), map(result => ...) ) const error$ = err$.pipe( tap(() => ...), map(result => ...) ) 通过在赋值之前修改分区返回值,我可以避免创建v

假设我有一段代码:

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

通过在赋值之前修改
分区
返回值,我可以避免创建
val$
err$
变量吗?

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

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

$httpSource.pipe(
    mergeMap(res => 
        res.error ? 
            throwError(res.error) : 
            of(res.value)
    ),
    tap(next => ..., err => ...)
).subscribe(
     next => ..., 
     err => ...
)
我使用的是
mergeMap
,因为
throwError
创建了一个必须合并到外部可观察对象中的内部可观察对象。请注意,
tap
subscribe
都为错误处理函数提供了第二个参数

关于错误通知的更多信息:定义了三种可以沿链传递的通知类型。其中之一是错误通知,其定义如下:

[错误通知]表示可观察对象已在指定的错误条件下终止,并且它将不会发出进一步的项

捕获和重新触发错误:如果错误通知沿着可观察链出现,我们可以通过使用
捕获错误
,优雅地捕获该错误并将其转换为不同的通知:

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

不,但是你为什么要创建两个可观察的对象呢?可观察模型中已经有一个错误通知。@ggradnig,因为我使用自定义函数进行区分(这就是为什么我使用
分区
)。但也许我可以简化。你能详细介绍一下“错误通知”吗?谢谢。疑问:如果我抛出一个自定义错误类型,在
subscribe
上,错误类型可能会变成
MyCustomType | HttpErrorResponse
(后者来自
HttpClient
),或者我错了吗?恐怕错误通知当前有一个
any
类型。也许这会在RxJS 7中有所改变,但目前你必须手动输入。我知道,我希望他们会在这方面有所改进。无论如何,该类型将成为一个联合,就像我上面写的那样,对吗?如果$httpSource可以生成一个
HttpErrorResponse
作为错误通知,那么是的,错误值可以是这个类型或您的自定义类型。这并不是说您必须只检查这两种类型。管道中的每个操作员都可能引入新错误,例如使用
first
可能会导致
清空错误。