Tunggu langganan dalam di dalam peta?

Saat saya mencoba berlangganan di dalam fungsi map, observasi tidak menunggu langganan dalam dijalankan.

Saya memiliki sayap berikut:

        return this.http.get(url).map((project)=>{       
             // replace pilot id by pilot object 
             this.UserService.retrieveObject(project.pilot).subscribe(pilot => { 
                 project.pilot = pilot,
             })

             //replace owner id by owner object
             this.UserService.retrieveObject(project.owner).subscribe(owner => { 
                 project.owner = owner,
             })
             return project;
         });

objek project yang kembali berisi pemilik, dan id percontohan, bukan objek karena tidak menunggu langganan.

Bagaimana caranya agar bisa diamati menunggu semua langganan dalam selesai?


person a bsss    schedule 09.03.2018    source sumber
comment
stackoverflow.com/ pertanyaan/40788163/   -  person Dionisis K    schedule 09.03.2018


Jawaban (1)


Anda harus melakukan refactor ini secara signifikan.

Anda dapat menggunakan forkJoin untuk menunggu kedua Observable selesai dan kemudian menggunakan fungsi "proyeksi" untuk memperbarui objek project:

return this.http.get(url)
    .mergeMap(project => Observable.forkJoin(
        this.UserService.retrieveObject(project.pilot),
        this.UserService.retrieveObject(project.owner),
        (pilot, owner) => {
            project.pilot = pilot;
            project.owner = owner
            return project;
        }
    ));
person martin    schedule 09.03.2018
comment
Satu hal yang perlu diperhatikan adalah perilaku kesalahan: jika salah satu sub-permintaan gagal, keseluruhan rantai akan gagal. - person Ingo Bürk; 09.03.2018
comment
Aku mencintaimu kawan, aku tidak akan pernah menebak peran parameter forkJoin terakhir tanpa jawabanmu. TI VM - person a bsss; 09.03.2018
comment
@IngoBürk Bagaimana caranya agar dapat dijalankan meskipun satu permintaan gagal? - person a bsss; 09.03.2018
comment
Anda dapat menambahkan .catch(…) ke permintaan di dalam forkJoin untuk menangani kesalahan dalam masing-masing sub-permintaan. - person Ingo Bürk; 09.03.2018