2017-04-25 70 views
5

我在我的service.ts中有一個方法getData(),如下所示。這會返回一個Observable。另一種服務ApiService也有一個方法get()它也返回一個Observable。在異步調用中訂閱Observable不工作[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") 
      ); 
     }); 
    } 

我想在異步 API重用此getData()方法調用從我的組件製成。請看下圖:

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'); 
    } 
}); 

錯誤: 但是,什麼情況是,的getData觀察的總是訂閱到apiUrl3。

我需要每個getData()單獨訂閱。有人可以幫我嗎?

預期結果:

加工apiUrl1

加工apiUrl2

加工apiUrl3

+0

我通過所有的stackoverflow解釋和其他資源來了解Observable和Promises真的是什麼。但是在我的異步調用中這不起作用。你能幫我做什麼錯嗎? – anusreemn

回答

0

難道不知道從哪裏是你的問題,但是這是更清晰也許會工作。

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)); 
}