Как уволить LoadingController после завершения метода внутри? - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю LoadingController ниже, представляю его и выполняю несколько методов:

this.loadingCtrl.create({
      message: 'Sending Message...'
    }).then(loadingEl => {
      loadingEl.present();
      this.conversationsService.addMessageToConversation(this.conversation.id, this.form.value.message);
      this.loadMsg();
      this.form.reset();
    });

Как только addMessageToConversation() успешно, я хочу dismiss LoadingController.

Может кто-нибудь сказать мне, как я могу это сделать?

Вот addMessageToConversation() на случай, если это потребуется:

addMessageToConversation(conversationId: string, message: string) {
    this._conversations.getValue().find(conversation => conversation.id === conversationId)
      .messages.push(
        new Message(
          Math.random().toString(),
          message,
          this.authService.userId,
          new Date(Date.now())
        ));
  }

1 Ответ

0 голосов
/ 11 апреля 2020

Есть два способа сделать это.

  1. Вы можете отправить событие после завершения вашего метода.
  2. Вы можете вернуть Promise, созданный методом .find (), из ваш объект. Оттуда в коде вашего компонента вы можете использовать async / await или .then () для вызова .dismiss () вашего контроллера загрузки.

Я бы предложил использовать метод № 2, так как это «нормально». Как только вы превратите метод сервиса в обещание, вы можете изменить свой код следующим образом:

this.loadingCtrl.create({
      message: 'Sending Message...'
    }).then(async loadingEl => {
      loadingEl.present();
      const res = await this.conversationsService.addMessageToConversation(this.conversation.id, this.form.value.message);
      this.loadMsg();
      this.form.reset();
      this.loadingCtrl.dismiss()
      
    });
  • ПРИМЕЧАНИЕ: это не завершено, поэтому я не смог проверить синтаксические ошибки. Надеюсь, вы поняли.
...