繁体   English   中英

在Angular2 / Ionic中的提供程序中可观察到http.get页面

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM