在Angular2/Ionic的提供者中使http.get在页面上可见
我在迁移我的Ionic应用程序(Angular>Angular2)时遇到了一些问题,主要是因为有承诺/可观察 这是我在CartPage上的方法:在Angular2/Ionic的提供者中使http.get在页面上可见,angular,ionic2,observable,Angular,Ionic2,Observable,我在迁移我的Ionic应用程序(Angular>Angular2)时遇到了一些问题,主要是因为有承诺/可观察 这是我在CartPage上的方法: this.cartService.list().subscribe( data => { console.log(data); this.cartData = data.cart; err => { console.log(err); }); list() { this.storage.get('toke
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);
}
);
});
}
在购物车提供商中:
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”
所以我搜索了又搜索,在文档或示例/教程中都没有找到像这样使用的有效的可观察性 我不知道我是否以某种方式遗漏了声明类型,或者我是否不应该使用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请求的令牌,但您必须从存储
获取该信息,并且该操作是异步的
在列表调用之前找到获取令牌的方法。
最简单的方法是让提供商保存该数据,并将其用作爱奥尼亚
存储提供商的代理,因此当提供商启动时,它会运行类似init()
的程序,并获取应用程序所需的基本数据,如令牌和其他东西,然后,您只需将该提供者注入您的CartProvider
并调用myDataProvider.token您应该首先解决这个.storage.get('token')
,然后您应该返回这个.http.get(…).map(…)
,订户
就像承诺的然后,但是您必须提供一个订阅者,如果不是,则不会执行可观察的。