#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());
});
}