2016-04-07 69 views
1

我剛剛開始學習angular2.I在調用angular2服務時出現問題。服務調用成功,但是我遇到問題,我該如何處理數據。在Angular1,我們這樣做:Angular2中的調用服務

DemoService.getExchangeDataConnection().then(function(response){ 
//here we handle all the data 
}) 

Angular2

constructor(private _sampleService: SampleService){ 
    this._sampleService = _sampleService; 
} 


onClickMe(){ 
    this.clickMessage ='You are my hero!'; 
    this.error = ""; 
    this.countries = []; 
    this._sampleService.test() 
    .subscribe(
     data => this.countries = data, 
     error => this.error = "Region " + this.region + " is invalid." 
    ); 

    } 

在這裏,我該如何處理數據 這裏是我的服務:

export class SampleService { 

constructor(http: Http){ 
     this.http = http; 
    } 

    test(){ 
console.log(AppSettings.API_ENDPOINT); 
    return this.http.get(AppSettings.API_ENDPOINT+"oceania").toPromise() 
     .then(res => console.log(res.json()), err => console.log(err)); 
    } 

} 
+0

不要轉換您HTTP調用承諾。 – Chandermani

回答

4

如果test方法返回一個可觀察的需要以與承諾類似的方式訂閱:

this._sampleService.test() 
    .subscribe(
    data => this.countries = data, 
    error => this.error = "Region " + this.region + " is invalid." 
    ); 

例如,對於test方法是這樣的:

test() { 
    return this.http.get('http://...').map(res => res.json()); 
} 

你可以注意到,你還可以使用與承諾Angular2。在這種情況下,您將以與您一樣的方式處理回覆。

編輯

你可以更新您的test方法是這樣的:

test(){ 
    console.log(AppSettings.API_ENDPOINT); 
    return this.http.get(AppSettings.API_ENDPOINT+"oceania") 
       .map(res => console.log(res.json()); 
} 

,並調用它像這樣:

this.service.test().subscribe(data => { 
    (...) 
}); 

如果你想利用諾言,你需要返回東西到您的then回調中以利用鏈接:

test(){ 
    console.log(AppSettings.API_ENDPOINT); 
    return this.http.get(AppSettings.API_ENDPOINT+"oceania").toPromise() 
    .then(res => res.json(), err => console.log(err)); // <--------- 
} 

現在,您可以讓您的數據是這樣的:

this.service.test().then(data => { 
    (...) 
}); 
+0

我收到訂閱不是函數 – Karan

+0

'test'方法返回什麼? –

+0

這將返回數據,但我不知道如何以同步方式處理此 – Karan