【发布时间】:2017-04-28 10:43:49
【问题描述】:
我正在尝试在 Angular2 HTTP 类之上创建一个用于使用 API 的类。主要的是我需要添加用户授权后可用的自定义身份验证标头。
主要问题是token存储在Ionic Storage模块中,只能异步获取,但我需要返回具体的类型......
export class APIRequest extends Http {
private storage : Storage;
constructor (backend: XHRBackend, options: RequestOptions) {
super(backend, options);
this.storage = new Storage;
}
request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> {
if (typeof url === 'string') {
url = AppConfig.API_SERVER + url
} else {
url.url = AppConfig.API_SERVER + url.url
}
this.storage.get('authToken').then(token => {
if (typeof url === 'string') {
if (!options) {
options = {headers: new Headers()};
}
options.headers.set('Authorization', `Bearer ${token}`);
} else {
url.headers.set('Authorization', `Bearer ${token}`);
}
// Here I need to return
}, err => {
// throw some error
})
return super.request(url, options).catch(this.catchAuthError(this));
}
}
所以基本上我需要以某种方式将return super.request(url, options)... 放入存储的承诺中,并在我获得该令牌时返回。
【问题讨论】:
-
为什么不能使用
return storage.get().then(fn).then( token => { return super.request() }) -
@raj 因为
: Observable<Response> -
不是
Observables方面的专家,但是如何使用fromPromise做出一个不符合承诺的可观察对象,然后使用flatMap返回requestobservale。 -
@raj 可以提供任何例子吗?
-
猜你有答案:)
标签: angular typescript ionic-framework ionic2 angular2-http