我现在对造成这个错误的原因感到困惑。我试图压缩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));
但是我收到了这个错误:“类型'{}'”
上不存在“属性'减少'增加混乱:
如果我使用6个值,它可以正常工作。
如果observable都返回原语,那么它可以正常工作。
如果我将此函数添加为我的zip中的最后一个参数:
function(...args: any[]) {
// I have no ieda why I need this hack, but the zip fails without it.
return args;
}
它工作正常。
这是RxJS中的错误吗?我错过了关于zip实现的一些内容吗?这是一个角度编译器吗?没有多少搜索文档显示了对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})]);
也可以。编辑:数组提要停止工作,现在需要使用传播运算符和数组。
答案 0 :(得分:0)
自2017年以来,很多事情发生了变化,rxjs
文档非常好,涵盖了人们可能想要的几乎所有内容。
现在让我们深入探讨这个问题。
首先要反对的是旧的zip
运算符(可以在这里找到:old zip),现在不推荐使用新的zip
(可以在这里找到:{{3 }})
主要区别在于,旧的操作员是可链接的运算符,其使用方式如下(此后变为可管道操作的):
of(1).pipe( zip(of(2)),map(([a,b]) => ({a,b}))).subscribe(x => console.log(x) // {a:1, b:2})
新操作是一个创造运算符,其用法如下:
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)),
)
但是,如果您使用打字稿,并且传递了超过6种不同类型的可观察对象,则会丢失打字和自动补全功能。