Ionic ion 4 -如何在获取数据之前等待订阅两个可观测量值

p8h8hvxi  于 2022-12-28  发布在  Ionic
关注(0)|答案(1)|浏览(143)

我很好地进入了这条路线:

http://localhost:8100/questions/question?id=3

现在我遇到了麻烦,如何处理两个订户在同一时间。
第一个订阅者从外部服务加载问题数组。
第二个函数根据route参数获取所需的Question对象。

app_data:AppData;
question:Question;

ngOnInit() {
  this.appService.app_data.subscribe((v) => { this.app_data = v; });

  this.route.queryParams.subscribe(p => {
    this.question = this.appService.app_data.questions.find(i => i.id === params.id);
  });
}

问题是当我打开这个路由时,它试图过滤服务仍然没有加载的数组。
错误类型错误:无法读取未定义的属性(正在读取"find")
我做错什么了吗?

c9qzyr3d

c9qzyr3d1#

建议使用combineLatest rxjs运算符来合并多个可观测值,并获取最后发出的值。
当任何可观察对象发出一个值时,发出每个可观察对象最后发出的值。

import { combineLatest } from 'rxjs';

combineLatest([this.appService.app_data, this.route.queryParams]).subscribe(
  ([appData, param]) => {
    this.app_data = appData;
    this.question = appData.questions.find((i) => i.id === param.id);
  }
);

Demo @ StackBlitz

奖金:

forkJoin的目的是等待可观察对象先完成,然后再完成下一个,但是route.params , route.queryParams observables will never be completed,因此forkJoin在此场景中不起作用。

相关问题