gpt4 book ai didi

typescript - 为什么 switchMap(forkJoin) 失败但 switchMap(arr=>forkJoin(arr)) 工作正常?

转载 作者:行者123 更新时间:2023-12-04 03:26:02 27 4
gpt4 key购买 nike

我有以下代码

const mySource:Observable<Observable<any>[]>

(...)

mySource.pipe(
switchMap(arr=>forkJoin(arr));
)

按预期工作,但是

mySource.pipe(
switchMap(forkJoin);
)

失败

REST error TypeError: You provided '0' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
RxJS 31
subscribeTo
from
forkJoinInternal
_trySubscribe
subscribe
innerSubscribe
_innerSub

为什么第二种变体不起作用?

堆栈 Blitz :https://stackblitz.com/edit/typescript-tztgpl?file=index.ts

请记住,这是一个运行时错误,与 IDE 无关。

最佳答案

这两个调用其实并不等价。 switchMap 将两个参数传递给它的投影函数。来自源和内部索引的值。你可以在这里看到它:https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/switchMap.ts#L106

所以使用以下内容:

switchMap(forkJoin),

实际上等同于使用:

switchMap((value, index) => forkJoin(value, index)),

... 这显然会引发错误,因为 0 不是 Observable。顺便说一句,无论如何,这将在 RxJS 的 future 版本中停止工作,因为 forkJoin 认为您正在列出源 Observales (forkJoin([obs1, obs2], obs3)) 已弃用并且它不会订阅该数组中的单个 Observable。换句话说,它不会压扁链条。

您可以查看这个小演示:https://stackblitz.com/edit/rxjs-mgb3fx?devtoolsheight=60

关于typescript - 为什么 switchMap(forkJoin) 失败但 switchMap(arr=>forkJoin(arr)) 工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67601692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com