javascript - Löften bryts medan sidor byggs


Jag använder promise och http.get för att hämta data från JSON API från Wordpress

Efter att ha hämtat data kommer jag att visa datan på en sida.

Men felet visas eftersom datan inte är tillgänglig när sidan byggs

Hur löser man det felet?

Här är min servicekod

loadPost(id) {
    return new Promise(resolve => {
        this.http.get('http://blog.macg.xyz/api/get_post/?id='+id)
            .map(res => res.json())
            .subscribe(post => {
                this.post = post;
                resolve(this.post);
                console.log(this.post);
            });
        });
    }

Och här är kontrollenheten

export class PostPage {
    public id:any;
    public post: any;
    public loading : any;

  constructor(public postService: PostService, public navCtrl: NavController,  params: NavParams, public loadCtrl: LoadingController) {
    this.id = params.get("id");
    // this.onPageWillEnter();
  }

  onPageWillEnter() {
    // Starts the process 
    this.showLoading();
  }

  showLoading() {
    this.loading = this.loadCtrl.create({
      content: "Please wait..."
    });
    // Show the loading page
    this.loading.present();
    // Get the Async information 
    this.loadPost();
  }

  loadPost(){
      this.postService.loadPost(this.id) // here where I call the service
      .then(data => {
        this.post = data;
        console.log(this.post);
        this.hideLoading();
      });
    }

    hideLoading(){
    // Hide the loading component
    this.loading.dismiss();
  }
}

Här är HTML-koden

<ion-header>
  <ion-navbar>
    <ion-title>{{id}}</ion-title>
  </ion-navbar>
</ion-header>
<ion-content padding>
    {{post.post.content}}
</ion-content>

Och här är felet

Svar #1

Eftersom felet kastas från din mallfil, kanske post.post.content orsakar felet. Om ditt inlägg är null (vilket är sant vid första körningen), kan försök att nå dess postvariabel orsaka det felet.

Du kan kontrollera om inlägget är null eller inte, till exempel

<ion-content padding ng-if="post">
     {{post.post.content}}
</ion-content>

Svar #2

Du kan använda elvis-operatorn ? för att undvika att det felet kastas när post-egenskapen fortfarande är null

<ion-header>
  <ion-navbar>
    <ion-title>{{id}}</ion-title>
  </ion-navbar>
</ion-header>
<ion-content padding>
    {{post?.post.content}}
</ion-content>