Rxjs Observable.zip不调用subscribe.next(如果源作为数组提供)

Rxjs Observable.zip不调用subscribe.next(如果源作为数组提供),rxjs,rxjs5,Rxjs,Rxjs5,我有一个二维数组行为子对象。出于调试目的,我希望在所有数组单元格发出值后立即以格式化的方式写入值。所以我写了这个: Observable.zip(universe.map(row => Observable.zip(row))) .takeUntil(stopper) .subscribe(u => console.log(`[\n\t[${u.map(r => r.toString()).join("],\n\t

我有一个二维数组
行为子对象
。出于调试目的,我希望在所有数组单元格发出值后立即以格式化的方式写入值。所以我写了这个:

    Observable.zip(universe.map(row => Observable.zip(row)))
        .takeUntil(stopper)
        .subscribe(u =>
            console.log(`[\n\t[${u.map(r => r.toString()).join("],\n\t[")}]\n]`))
没有写任何东西。而且这也不起作用:

    Observable.zip(universe[0])
        .takeUntil(stopper)
        .subscribe(u => console.log(`1[${u.toString()}]`))
但以下操作有效(数组有5列):

我也考虑过.zipAll()运算符,但没有关于它的文档

这可能是Observable.zip()代码中的错误,因为它在代码帮助中显示了
ArrayLike
作为可能的参数类型


那么,有没有其他方法可以获得此功能?在重新分配所有值之后,我如何才能在不知道实际尺寸的情况下记下数组值呢?

重要的是,操作符不是获取一个观察值数组,而是获取一个未打包的观察值序列

这就是为什么
Observable.zip([obs1,obs2,obs3])
不起作用的原因

但是
Observable.zip(obs1、obs2、obs3)
可以工作

当我们不知道什么是
universe
时,我们不可能帮助您。从现在的情况来看,您似乎可以使用(假设您使用的是ES6或TypeScript):


我不知道有什么计划,但现在它只调用rxjs@5.0.3Observable.zip()函数实现不识别
Observable
数组,即使
导出声明函数zipStatic(数组:ObservableInput[]):Observable
导出声明函数zipStatic(…可观测值:数组):可观测函数声明发生在rxjs/operator.zip.d.ts中(这些声明之间的区别超出了我的Type/Javascript知识)。它只是将传递给它的参数对象成员泵送到本地数组中,如果传递数组,则不会将其展平。甚至不检查参数类型以提高情况


在收到上面@martin的回答后,我用
Observable.zip.apply(null,Observable_数组)
将调用更改为
Observable.zip()
,然后问题就解决了。但是
.zip()
应该接受(至少一个)可观察的
数组,以帮助可读性并遵守上述函数声明。

感谢您的提示回答。univer的定义是:
let universe:BehaviorSubject[][]
。对于错误的参数,没有任何编译或运行时错误。我将尝试使用apply()或call(),它们满足了我的需要。我在zip.d.ts:
导出声明函数zipStatic(数组:observateInput[])中发现了这一点:Observable
@koducu实际上,您应该只担心
zipProto
,正如您在这里和这里看到的,您是对的,但在编辑器的代码帮助窗口中,我看到了函数声明,并自然假设函数接受
Observable
数组。如果我们不能依靠官方声明,那还有什么呢?我们应该阅读所有参考的库代码吗?zip()应该接受
可观察的
数组,或者我认为应该从库中删除声明。谢谢你给我指引了正确的方向。(非常感谢您的回答,我不敢相信我刚才花了三个小时调试了这个,却发现了这个)感谢“Observable.zip.apply(null,Observable_数组)”提示!
    Observable.zip(universe[0][0], universe[0][1], universe[0][2], universe[0][3], universe[0][4])
        .takeUntil(stopper)
        .subscribe(u => console.log(`2[${u.toString()}]`))

    Observable.zip(Observable.zip(Observable.zip(Observable.zip(universe[0][0], universe[0][1]), universe[0][2]), universe[0][3]), universe[0][4])
        .takeUntil(stopper)
        .subscribe(u => console.log(`3[${u.toString()}]`))
Observable.zip(...universe[0]);