Контроллер загрузки ожидает проблемы с Ionic - PullRequest
0 голосов
/ 07 августа 2020

На моей странице ngOnInit я вызываю функцию для представления Загрузка, а затем вызываю свою службу для загрузки данных. Проблема в том, что вызов службы завершается до начала загрузки. Как это возможно с ожиданием?

loading: any;
...
ngOnInit() { 
    this.presentLoading();
    this.myService.get().subscribe((item)=>{
      console.log('dismiss');
      this.loading.dismiss();
    }, ()=>{
      this.loading.dismiss();
    })
  }

  async presentLoading() {
    this.loading = await this.loadingController.create({
      message: 'Loading...',
      duration: 20000
    });
    console.log('presentLoading')
    await this.loading.present();
  }

В консоли я вижу:

dismiss
ERROR TypeError: Cannot read property 'dismiss' of undefined....
presentLoading

Я использую Ionic4.

1 Ответ

1 голос
/ 07 августа 2020

В вашем случае (на основе кода) у вас есть функция presentLoading, которая возвращает обещание (asyn c), поэтому, даже если внутри нее вы используете операторы await - внутри крючка ngOnInit ничто не инструктирует выполнение для ожидания ожидания для presentLoading.

Вы можете сделать:

  async ngOnInit() { 
    await this.presentLoading();
    this.myService.get().subscribe((item)=>{
      console.log('dismiss');
      this.loading.dismiss();
    }, ()=>{
      this.loading.dismiss();
    })
  }

Кроме того, поскольку вы используете Onservables, может иметь смысл вызвать dismiss внутри "завершенной" функции:

  async ngOnInit() { 
    await this.presentLoading();
    this.myService.get().subscribe((item)=>{
      console.log('dismiss');
    }, (error)=>{
      console.log(error);
    }, (completed)=>{
      this.loading.dismiss();
    }
  })

A примечание - создание ngOnInit asyn c метода не «повредит», но лучше узнать немного больше о том, какие последствия он имеет: async / await в Angular `ngOnInit`

...