2017-07-28 112 views
2

我來自Python世界,並且是Angular/ts/js編程方式的初學者。Angular Promise:無法獲得價值

Ionic storage.get()方法返回Promise。我應該如何獲得令牌的價值以便通過我的http查詢發送?

現在,我想要這種錯誤的集團:

get(url: string): Observable<Response> { 
    let token = ""; 
    this.storage.get('token') 
     .then(token => token = token); 

    return this.http.get(url, { "Authorization" : token}); 
} 

當然,請求葉令牌=「」,而不是說應該來的承諾分辨率回來後的一個。

我在Promise中看不到其他方法,而不是then()catch()。我已經考慮下面的代碼:

get(url: string): Observable<Response> { 
    return this.storage.get('token').then(
    token => { 
     return this.http.get(url, { "Authorization": token }) 
); 
}); 

但隨後,get(url)返回Promise<Observable<Response>>,而不是Observable<Response>,這並不能幫助我很多。

如果anwser位於使用延遲($ q https://docs.angularjs.org/api/ng/service/ $ q)之內,有人請告訴我該類如何導入角/離子?

謝謝您的幫助:)

回答

0

沒有,$q在AngularJS是用來對付承諾。在Angular中,你主要使用Observable

您可以使用Observable.fromPromise將承諾轉換爲Observable後跟flatMap,因此它最終會返回一個可觀察的Response類型。

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/fromPromise'; 

get(url: string): Observable<Response> { 
    let token = ""; 
    return Observable.fromPromise(this.storage.get('token')) 
     .flatMap(token => this.http.get(url, { "Authorization" : token})); 
} 
+0

Hi @ pankaj-parkar。感謝您的回答。我得到「[ts]屬性'fromPromise'不存在於'typeof Observable'類型中。」我會盡快修復它,但如果你有任何提示,將歡迎:) – Paul

+0

@Paul你添加了'Observable' import? –

+0

是的,我的代碼中有這兩行: '從'rxjs/Observable'導入{Observable}; import'rxjs/add/operator/fromPromise';'但是我在'rxjs/add/operator'中沒有'fromPromise.js',所以我猜這是正常的。或不... ? – Paul