Ионная тревога: подождите, пока не будет нажата кнопка

#ionic-framework #promise #alert

#ионный фреймворк #обещание #предупреждение

Вопрос:

У меня есть класс Action с его методом do() , в котором вызывается IonicAlert. Что я хочу сделать сейчас, так это вызвать что-то вроде Action.do().then( () => { /* do domething */ } ); , но только после того, как в предупреждении было нажато OK.

 do(): Promise<boolean> {

    let alert = this.alertCtrl.create({
      buttons: [{
        text: 'OK',
        handler: () => {
          alert.dismiss().then( () => { /* do something */ });
          return false;
        }
      }]
    });

    alert.present();
    return null;
  }
}
  

Я добавил return null; только для того, чтобы не получить ошибку, но, конечно, это не работает.
Есть идеи, как это решить? Спасибо

PS: Я также опубликовал это на форуме ionic:https://forum.ionicframework.com/t/ionic-alert-wait-until-button-is-pressed/67448

Ответ №1:

Нашел решение с помощью этого сайта:https://basarat.gitbooks.io/typescript/content/docs/promise.html

 do(): Promise<boolean> {
    return new Promise((resolve, reject) => {

      let alert = this.alertCtrl.create({
        buttons: [{
          text: 'OK',
          handler: () => {
            alert.dismiss().then(() => { resolve(true); });
            return false;
          }
        }]
      });

      alert.present();

    });
  }
}
  

Ответ №2:

Вот версия, которая может возвращать true или false :

  showConfirm(): Promise<boolean> {
    return new Promise((resolve, reject) =>{
      const confirm = this.alertCtrl.create({
        title : 'Are you sure ?',
        buttons: [
          {
            text: 'Yes',
            handler:_=> resolve(true)
          },
          {
            text: 'No',
            handler:_=> resolve(false)
          }
        ]
      }).present();
    })
  }
  

Чтобы вызвать обещание :

 this.showConfirm().then((result) => {
        if(result){
          // do something
        }
})
  

Ответ №3:

Это работает для меня

 handler: () => {
           console.log(this.viewCtrl.dismiss());
         }
  

Ответ №4:

Этот код не работал у меня в Ionic4. Это сделало:

 presentAlert():Promise<boolean> {
  return new Promise((resolve, reject) => {
    const ctl = this.alertController;
    let alert:any = this.alertController.create({
      buttons: [{
        text: 'OK',
        handler: () => {
          ctl.dismiss().then(() => { resolve(true); });
          return false;
        }
      }]
    }).then((dlg) => dlg.present());
  });
}