我在迁移我的离子应用程序(Angular> angular2)中遇到一些困难,主要是带有承诺/可观察的。
这是我在 CARTPAGE 上的方法:
this.cartService.list().subscribe(
data => {
console.log(data);
this.cartData = data.cart;
err => {
console.log(err);
});
和 CART提供商:
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"。
所以我已经搜索和搜索过,在文档或示例/教程中都没有找到这样的可观察到的可行的可行的。
我不知道我是否缺少以某种方式声明类型,还是我不使用订阅并使用一些不同的方法。
谢谢!
购物车页面:
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 request ,但是您必须从Storage
获取这些信息,并且该操作是 async 。
找到一种在列表调用之前获取令牌的方法。最简单的方法是让提供商持有该数据并将其用作离子Storage
提供商的代理,因此,当提供商启动时,它运行类似于init()
并获取应用程序所需的基本数据,例如>令牌和其他东西,然后您只需将该提供商注入CartProvider
并致电myDataProvider.token
。