gpt4 book ai didi

javascript - Angular 2 RxJS Zip 运算符对参数有限制吗?

转载 作者:行者123 更新时间:2023-12-03 22:36:31 24 4
gpt4 key购买 nike

我现在对导致此错误的原因感到困惑。我正在尝试压缩 7 个 Observables 的结果,例如:

var zipped$ = Observable.zip(
Observable.of({prop1:1}),
Observable.of({prop2:2}),
Observable.of({prop3:3}),
Observable.of({prop4:4}),
Observable.of({prop5:5}),
Observable.of({prop6:6}),
Observable.of({prop7:7})
);

然后将它们与 mergeAll() 和 reduce() 合并,如:
var reduced$ = zipped$.mergeAll().reduce((acc,val) => Object.assign({},acc,val));
reduced$.subscribe(final => console.log(final));

但我收到此错误:“类型 '{}' 上不存在属性 'reduce'”

为了增加困惑:

如果我使用 6 个值,它工作正常。

如果 observables 都返回原语,它工作正常。

如果我将此函数添加为 zip 中的最后一个参数:
function(...args: any[]) {
// I have no ieda why I need this hack, but the zip fails without it.
return args;
}

它工作正常。

这是 RxJS 中的错误吗?我是否遗漏了有关 zip 实现的一些信息?这是 Angular 编译器的东西吗?没有多少搜索文档显示 zip 的参数数量有限制。任何见解都值得赞赏。

谢谢

编辑:对于任何其他找到这个的人。

最好的解决方法是将 observables 粘贴在一个数组中并将其作为单个参数提供,例如:
var zipped$ = Observable.zip(...[
Observable.of({prop1:1}),
Observable.of({prop2:2}),
Observable.of({prop3:3}),
Observable.of({prop4:4}),
Observable.of({prop5:5}),
Observable.of({prop6:6}),
Observable.of({prop7:7})]);

这也可以正常工作。编辑:数组提要停止工作,现在需要使用扩展运算符和数组。

最佳答案

自 2017 年以来发生了很多变化,rxjs现在的文档非常好,几乎涵盖了人们可能想要的所有内容。

现在让我们深入探讨这个问题。

首先是旧的zip运算符(可在此处找到:old zip)现已弃用,取而代之的是新的 zip (可以在这里找到:zip)

主要区别在于旧的操作符是一个可链接的操作符,它的使用方式是这样的(后来它变成了管道式的):

of(1).pipe( zip(of(2)),map(([a,b]) => ({a,b}))).subscribe(x => console.log(x) // {a:1, b:2})


虽然 new 是一个创建运算符,但使用如下:
zip(of(1),of(2)).pipe(delay(1000),map(([a,b]) => ({a,b}))).subscribe(x => console.log(x) // {a:1, b:2})

现在关于这个问题,您可以在 zip 操作符中传递的可观察对象的数量没有限制,例如,以下代码段将起作用
let arr = (new Array(100)).fill(false).map((x,i)=> of({[`key${i}`]:i}))
zip(...arr).pipe(
mergeAll(),
reduce((acc,val) => Object.assign({},acc,val)),
)

但是,如果您使用 typescript 并传递超过 6 个不同类型的 observable,您将丢失类型和自动完成。

关于javascript - Angular 2 RxJS Zip 运算符对参数有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45513014/

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