如何在switchMap中使用zip?

时间:2018-08-28 01:58:30

标签: angular rxjs

我正在开发一个angular 6应用,在我的组件中,我有以下代码:

 ngOnInit() {
   this.$subscription = this.route.params
     .pipe(map(param => param['id']))
     .pipe(switchMap(id => {
        this.id = id;
        console.log(this.id);
        return zip(
          this.remote1.getDetail(this.id),
          this.remote2.getDetail(this.id),
          this.remote3.getDetail(this.id)
    )
    })).subscribe(result => {
      console.log(result);
 }

运行此代码时,我在控制台上收到此错误:

  

错误TypeError:您提供了一个无效的对象,该对象应在其中流。您可以提供一个Observable,Promise,Array或Iterable。       在subscriptionTo(vendor.js:181613)       在subscriptionToResult(vendor.js:181765)       在SwitchMap .....

我正确地获得了console.log(this.id),但没有正确地获得console.log(result)

zip运算符内的所有方法均返回Observable。我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

Zip接受可观察变量作为输入signature: zip(observables: *): Observable,因此应为:

ngOnInit() {
   this.$subscription = this.route.params
     .pipe(map(param => param['id']))
     .pipe(switchMap(id => {
        this.id = id;
        console.log(this.id);
        return zip(
          of(this.remote1.getDetail(this.id)),
          of(this.remote2.getDetail(this.id)),
          of(this.remote3.getDetail(this.id)),
    )
    })).subscribe(result => {
      console.log(result);
 }

https://www.learnrxjs.io/operators/combination/zip.html