【问题标题】:ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'subscribe' of null (Ionic Angular)错误错误:未捕获(承诺):TypeError:无法读取null的属性“订阅”(Ionic Angular)
【发布时间】:2021-02-20 11:09:47
【问题描述】:

在我的 angular ionic 项目中,当我登录第一页时出现错误“错误错误:未捕获(承诺中):TypeError:无法读取属性 'subscribe' of null”但是当我重新加载页面时,我没有'没有错误,我有数据。谢谢

    (await this.pageService.getAllTables()).subscribe((res: any) => {
          this.tables = res.body
    });
  }```

    ```getAllTables() {
        this.storage.get('USER').then(user =>{this.user = user;});
        return this.storage.get('ACCESS_TOKEN').then(token =>{
            if (this.user) {
                return this.http.get(this.url + 'table/' + this.user.id, { 
                    headers: new HttpHeaders({
                        'Content-Type': 'application/json',
                        'Authorization': 'Bearer ' + token
                    }), 
                    observe: 'response'
                });
            }
            return null;
        });
    }```

【问题讨论】:

    标签: javascript angular ionic-framework


    【解决方案1】:

    试试这个

    getAllTables() {
            return this.storage.get('USER')
               .then(user =>{this.user = user;})
               .then(() => this.storage.get('ACCESS_TOKEN'))
               .then(token =>{
                 if (this.user) {
                    return this.http.get(this.url + 'table/' + this.user.id, { 
                        headers: new HttpHeaders({
                            'Content-Type': 'application/json',
                            'Authorization': 'Bearer ' + token
                        }), 
                        observe: 'response'
                    });
                }
                return null;
            });
    

    这段代码仍然很奇怪,因为你返回 observable,包装在 promise 中,但至少应该可以工作。

    您可以尝试将所有内容都转换为承诺。它看起来像这样:

    getAllTables() {
            return this.storage.get('USER')
               .then(user =>{this.user = user;})
               .then(() => this.storage.get('ACCESS_TOKEN'))
               .then(token =>{
                 if (this.user) {
                    return this.http.get(this.url + 'table/' + this.user.id, { 
                        headers: new HttpHeaders({
                            'Content-Type': 'application/json',
                            'Authorization': 'Bearer ' + token
                        }), 
                        observe: 'response'
                    }).toPromise();
                }
                return null;
            });
    

    用法:

    this.tables = (await this.pageService.getAllTables())?.body;
    

    【讨论】:

    • 谢谢你的回答,我已经没有错误了,但是我的前端数据直到我重新加载页面才出现
    【解决方案2】:

    我认为您的 this.pageService.getAllTables 在您订阅时尚未加载。

    请先在构造函数中注入“pageService”,然后将所有内容转换为 Promise

    喜欢这个

    constructor(){
    private pageService: PageService
    
    }
    

    之后将所有内容转换为承诺

    getAllTables() {
        return this.storage.get('USER')
           .then(user =>{this.user = user;})
           .then(() => this.storage.get('ACCESS_TOKEN'))
           .then(token =>{
             if (this.user) {
                return this.http.get(this.url + 'table/' + this.user.id, { 
                    headers: new HttpHeaders({
                        'Content-Type': 'application/json',
                        'Authorization': 'Bearer ' + token
                    }), 
                    observe: 'response'
                }).toPromise();
            }
            return null;
        });
    

    【讨论】:

    • 感谢您的回答,我不再有错误,但是直到我重新加载页面后我的前端数据才出现。但我的构造函数中已经有了声明。
    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2019-10-08
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多