[英]Angular2 service doesn't return result to Observable from http.get to component
[英]Making http.get on page from observable in provider in Angular2/Ionic
我在迁移Ionic应用程序(Angular> Angular2)时遇到了一些麻烦,主要是使用Promise / Observables。
这是我在CartPage上的方法 :
this.cartService.list().subscribe(
data => {
console.log(data);
this.cartData = data.cart;
err => {
console.log(err);
});
并在购物车提供商中 :
list() {
this.storage.get('token')
.then((token) => {
var authHeader = new Headers();
authHeader.append('Authorization', 'Bearer ' + JSON.stringify(token).replace(/['"]+/g, ''));
this.http.get(this.global.getApiUrl()+'cart/list', {
headers: authHeader
})
.map(res => res.json())
.subscribe(
data => {
this.data = data.data;
return this.data;
},
err => {
console.log(err);
}
);
});
}
但是我得到:
打字稿错误类型'void'上不存在属性'subscribe'。
因此,我进行了搜索,但在文档或示例/教程中都找不到像这样有效的可观察到的用法。
我不知道我是否以某种方式缺少声明类型,或者我不应该使用订阅并使用其他方法。
谢谢!
购物车页面:
this.cartService.list(token).subscribe(
data => {
console.log(data);
this.cartData = data.cart;
err => {
console.log(err);
});
购物车提供商:
list(token) {
var authHeader = new Headers();
authHeader.append('Authorization', 'Bearer ' + JSON.stringify(token).replace(/['"]+/g, ''));
return this.http.get(this.global.getApiUrl()+'cart/list', {
headers: authHeader
})
.map(res => res.json());
}
好吧,这是一个竞争条件,这里的主要问题是您需要http请求的令牌 ,但是必须从Storage
获取该信息,并且该操作是async 。
在列表调用之前找到一种获取令牌的方法。 最简单的方法是让提供程序保存该数据并将其用作ionic Storage
提供程序的代理,因此,当该提供程序启动时,它将运行类似init()
并获取应用程序所需的基本数据,例如令牌以及其他内容,那么您只需将该提供程序注入CartProvider
并调用myDataProvider.token
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.