2017-06-18 16 views
2

私は、プロバイダのページで私の関数を呼び出したAPI-serive.ts持っイオン2

//get city in profile 
    getCityInProfile(){ 
     return new Promise((resolve, reject) => { 

      let headers = new Headers({ 'Authorization': 
      localStorage.getItem('token') }); 

      this.http.get(this.getProfile,{headers:headers}).subscribe(
       (res) => { 
        console.log (res.json().profile.location) 
        resolve(res.json().profile.location) 
        return (resolve(res.json().profile.location)); 
       },(err) => { 
        reject(err); 
       }); 
     }) 

    } 

私は別のページでは、この関数を呼び出します

{「__zone_symbol__state」:ヌル、「__ zone_symbol__value」:「キプロス」}

、これは私が私のページでそれを呼び出す方法です、それはこれを返す私のプロファイルで街を取得する.TS .ts

CityInProfile(){にconsole.log (JSON.stringify(this.jobsServiceProvider.getCityInProfile())+ '返さ') this.cityProfile = this.jobsServiceProvider.getCityInProfile()。 }

ので、あなたがのために待たなければならない価値がある(キプロス)ですが、それはそのよう

答えて

2

を返されているなぜあなたはサービスが非同期方法にデータを取得していることを心に留めておく必要がありそのデータを準備します。

あなたが気にしない場合、私はあなたのコードにいくつかの小さな変更を作ると思います:あなたがそのサービスを利用したいときに、あなたはこのようにそれを行う必要があると思います

// Get city in profile 
getCityInProfile(): Promise<any> { 

    // First get the token from the localStorage (it's async!) 
    return localStorage.getItem('token').then(token => { 

     // Set the token in the header 
     let headers = new Headers({ 'Authorization': token }); 

     // Make the request, but don't subscribe here! 
     return this.http.get(this.getProfile, { headers:headers }) 
         .map(res => res.json()) 
         .map(resJson => resJson.profile.location) 
         .toPromise(); 

    }); 
} 

を:

public getCityInProfile(): void { 

    // Use the 'then' to wait for the response to be ready 
    this.jobsServiceProvider.getCityInProfile().then(city => { 

     // Now you can use the city returned by the service 
     console.log(`Returned: ${city}`); 
     this.cityProfile = city; 

    }); 

} 
+1

とても感謝しています。 – noor