2017-04-25 20 views
5

Servislerimdeki aşağıdaki gibi getData() yöntemim var. Bu Gözlemlenebilir'i döndürür. Başka bir hizmet ApiService da bir Gözlemci döndüren get() yöntemine sahiptir.Anlık çağrılarda gözlemlenemeyen abone olmadı [Angular2]

getData(args, parentKey?):any { 
     return new Observable(observer => { 
      this.apiService.get(args).subscribe(
       response => { 
        observer.next({ 
         data: response['data'], 
         status: ($.isEmptyObject(response) ? false : true) 
        }); 
       }, 
       error => console.log("error : ", error), 
       () => console.log("finished") 
      ); 
     }); 
    } 

Ben asenkron API bu getData() yöntemini yeniden çalışıyorum benim bileşenden yapılacak çağırır. Aşağıya bakın:

this.myService.getData({ 
    url: 'apiUrl1', 
    method: 'Method1', 
    parameters: {} 
}).subscribe(response => { 
    if (response['status']) { 
     console.log('Processed apiUrl1'); 
    } 
}); 
this.myService.getData({ 
    url: 'apiUrl2', 
    method: 'Method2', 
    parameters: {} 
}).subscribe(response => { 
    if (response['status']) { 
     console.log('Processed apiUrl2'); 
    } 
}); 
this.myService.getData({ 
    url: 'apiUrl3', 
    method: 'Method3', 
    parameters: {} 
}).subscribe(response => { 
    if (response['status']) { 
     console.log('Processed apiUrl3'); 
    } 
}); 

Hata: Ama ne olur getData-gözlemlenebilir hep apiUrl3 içine abone olmasıdır.

Tek tek abone olmak için her getData() gerekir. Birisi bana yardım edebilir mi?

Beklenen Sonuç: apiUrl1

İşlenmiş apiUrl2 apiUrl3 İşlenmiş

İşlenmiş

+0

Tüm Stackoverflow açıklamalarını ve diğer kaynakları Gözlemler ve Vaatler gerçekte neler olduğunu okuyun. Ama asenkron çağrılarımda bu işe yaramıyor. Yanlış yaptığım şeye yardım edebilir misin? – anusreemn

cevap

0

etmeyin emin sorun, ama bu daha açık olduğu ve belki işe yarayacak.

getData(args, parentKey?):any { 
    this.apiService.get(args) 
     .map(response => { 
       data: response['data'], 
       status: ($.isEmptyObject(response) ? false : true) 
     }) 
     .do(() => console.log("finished")) 
     .catch(error => console.log("error : ", error)); 
}