javascript - Angular 7 嵌套可观察量

标签 javascript angular observable subscription angular2-observables

我有两个收藏:人和宠物。每只宠物都有 personId。我的目标是让所有人和每个人都在单个 json 中添加他/她的宠物。到目前为止我所做的是:

this.personService.getPersions().subscribe(persons => {
  const personsWithPets = persons.flatMap(person => this.petService.getPetsByPersonId(person._id)
    .subscribe(petsData => {
      person.pets = petsData;
      return person;
    }, (err) => {
     console.log(err);
    }));
  this.persons = personsWithPets; // This is fired before previous subscribe
}, (err) => {
  console.log(err);
});

我做错了什么?为什么 this.persons = PersonsWithPets; 在订阅完成之前被触发?

最佳答案

已更新添加的评论

另一个:stackblitz

this.service.getPersons().pipe(switchMap((per:any[])=>{
       //create an array of observables
       const obs=per.map(per=>this.service.getPet(per.id));
       //call all of them in forkjoin
       return forkJoin(obs).pipe(map(pets=>
         //pets is an array, in pets[0] is the response of getPet(1), 
         //in pets[1] is the response of getPet(2)
         pets.map((pet,i)=>{
           return {
             ...per[i], //all the properties of the person
             pets:pet   //+ in pets an array with the pets of the person
             }
         })
       ))
     })).subscribe(res=>this.res=res)

关于javascript - Angular 7 嵌套可观察量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55140404/

相关文章:

javascript - 结合两个平行的可观察量

javascript - 如何使用html5 canvas + js制作粒子缩放过渡?

javascript - 使用 JavaScript 验证电子邮件地址文本框

angular - "Ionic dev app"和 "real mobile phone"上的空白屏幕

ngFor 的 Angular2 微调器

java - 可观察的java对象不更新

与 Kotlin、BaseObservable 和自定义委托(delegate)的 Android 数据绑定(bind)

javascript - 防止下面的 'obscuring' onmouseover 事件中的图像?

javascript - 使用 Jquery 比较两个输入值

延迟加载模块中的 Angular 延迟加载模块