簡體   English   中英

錯誤錯誤:未捕獲(承諾):類型錯誤:無法讀取 null 的屬性“訂閱”(離子角)

[英]ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'subscribe' of null (Ionic Angular)

在我的 angular 離子項目中,當我登錄第一頁時出現錯誤“錯誤錯誤:未捕獲(承諾):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;
        });
    }```

嘗試這個

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;

我認為您的 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;
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM