【问题标题】:Wait for two observables finish with zip等待两个 observable 用 zip 完成
【发布时间】:2018-04-03 18:25:57
【问题描述】:

这是方法代码。我正在尝试使用 zip 等待两个可观察对象完成,但没有任何日志,甚至没有调用 fooProvider 中的 http 调用。

let obsArray: Observable<any>[] = [];

this.idArray.forEach(id => {
  obsArray.push(this.fooProvider.bar(id, 1));
});

Observable.zip(obsArray)
  .subscribe(res => console.log(res));

【问题讨论】:

  • 如果您需要等到所有 Observables 完成,您应该使用 forkJoin 代替。否则尝试使用 Observable.zip(...obsArray) 解压数组。
  • @martin 可以解包吗?我认为zip 在所有可观察对象都发出一个值时发出了一个值。所以不仅当所有的都完成了。 forkjoin 会是唯一的解决方案吗?
  • 它与 forkJoin 一起工作。谢谢!

标签: javascript typescript rxjs


【解决方案1】:

Observable.zip 接受参数(a, b, ..., n)。我无法使其直接与数组一起使用,但它应该与apply 一起使用:

const zip = Observable.zip
zip.apply(null, obsArray).subscribe(...)

apply 会将给定数组转换为函数调用,并将数组元素作为参数传递。

编辑:根据@martin 的评论,如果您的环境支持,您也可以使用扩展运算符。 zip(...obsArray).subscribe(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多