我们有一个当前正在使用angular http客户端的应用程序,但是有角度的http客户端无法执行证书固定,因此我们需要将其替换为ionic-native插件。这个插件“cordova-HTTP”返回Promise而不是Observable。由于这是我们的核心HTTP“路由器”类,许多其他服务依赖于它。因此,而不是重写所有期望Observable的服务,我想将Prmise包装为Observable。这是我到目前为止尝试做的事情,我在设备上没有错误,但是客户端一直挂着,就像等待Promise被解决一样。无论如何,我的方法和实施是否不正确?
return Observable.fromPromise(this.http.get(url, {}, this.headers,
(res) => {
return Promise.resolve(res);
},
(error) => {
if (error.status === 401 || error.status === 403) {
this.login().then( () => {
return this.http.get(url, {}, this.headers);
});
} else {
this.log.error("Problem with authenticated get", error.error);
return Promise.reject(error);
}
}
));
答案 0 :(得分:2)
最后我解决了我的问题:
return Observable.create( (observer) => {
this.http.get(url, {}, this.headers)
.then( (response) => {
observer.next(new AuthResponse(response.headers, response.data));
observer.complete();
})
.catch( (error) => {
if (error.status === 401 || error.status === 403) {
this.login().then( () => {
this.http.get(url, {}, this.headers)
.then( (response) => {
observer.next(new AuthResponse(response.headers, response.data));
observer.complete();
})
.catch( (error) => {
this.log.error("Problem with authenticated get", error.error);
observer.error(error);
});
});
} else {
this.log.error("Problem with authenticated get", error.error);
observer.error(error);
}
});
});