这是我的获取方法。
get(url: string, options?: RequestOptionsArgs): Promise<Observable<{}>> {
return new Promise((resolve, reject) => {
this._frotzOptions(url, options).then((data) => {
if (data) {
resolve(this.http.get(url, data));
} else
resolve(false);
}).catch((err) => {
reject(err);
});
});
}
_frotzOptions方法。
private _frotzOptions(urlo: string | Request, options: RequestOptionsArgs): Promise<{}> {
if (!options) {
options = {}
}
if (!options.headers) {
options.headers = new Headers();
}
return new Promise((resolve, reject) => {
this.storage.get('token').then(token => {
options.headers.append('Content-Type', 'application/json');
options.headers.append('Authorization', 'Bearer ' + token);
if (token) {
resolve(options);
}
else
resolve(false);
}).catch((err) => {
reject(err);
});
});
}
首页
var subscription = Observable.fromPromise(this.ahttp.get(url));
subscription.subscribe((data) => {
data.subscribe(rsp => {
console.log("rsp", rsp);
})
}, (err) => {
console.log(err)
});
当我需要使用通过 get 方法解析的数据时,我必须在订阅中使用订阅!使用订阅的最佳方法是什么!任何建议!谢谢!
嗨,你为什么不这样做:
private _frotzOptions(urlo: string | Request, options: RequestOptionsArgs): Observable<any> { //<--!! CHANGE TO OBSERVABLE from Rx/rx
if (!options) {
options = {}
}
if (!options.headers) {
options.headers = new Headers();
}
return new Promise((resolve, reject) => {
this.storage.get('token').then(token => {
options.headers.append('Content-Type', 'application/json');
options.headers.append('Authorization', 'Bearer ' + token);
if (token) {
resolve(options);
}
else
resolve(false);
}).catch((err) => {
reject(err);
});
});
然后当你想使用它时:
this.ahttp.get(url).subscribe((data) => {
data.subscribe(rsp => {
console.log("rsp", rsp);
})
}, (err) => {
console.log(err)
});
最后...要在请求中使用INTERCEPTOR
注入您的持有者令牌...也许有一些插件,例如:
https://www.npmjs.com/package/angular2-http-interceptor
在另一个承诺/可观察对象上使用新的 promise 构造函数是一种反模式。 转换您的可观察内容并返回它。
您的get
功能可以简化为:
get(url: string, options?: RequestOptionsArgs): Promise<{}> {
return this._frotzOptions(url, options).then((data) => {
if (data) {
return this.http.get(url, data).toPromise(); //use Observable toPromise function
} else
return false;
}).catch((err) => {
console.log(err); // handle error
});
}
您的_frotzOptions
功能:
private _frotzOptions(urlo: string | Request, options: RequestOptionsArgs): Promise<{}> {
if (!options) {
options = {}
}
if (!options.headers) {
options.headers = new Headers();
}
return this.storage.get('token').then(token => {
options.headers.append('Content-Type', 'application/json');
options.headers.append('Authorization', 'Bearer ' + token);
if (token) {
return options;
}
else
return false;
});
}
这称为承诺链接