我有一个Ionic 2应用程序,它使用ionViewCanLeave()navGuard来显示确认消息.这很好用;用户将看到一个确认对话框,如果需要,可以选择不离开.这是它的代码:
// About to leave
ionViewCanLeave() {
if(!this.allowedToLeave) {
return new Promise((resolve,reject) => {
let confirm = this.alertCtrl.create({
title: 'Are you sure?',message: 'Are you sure?',buttons: [{
text: 'OK',handler: () => {
this.allowedToLeave = true;
resolve();
},},{
text: 'Cancel',handler: () => {
reject();
}
}],});
confirm.present();
});
}
}
我现在需要从存储中检查一个额外的变量.为了得到那个变量,我需要一个承诺.我的代码如下:
// About to leave
ionViewCanLeave() {
this.storage.get('safe_to_leave').then((val) => {
this.safeToLeave = val;
if(!this.allowedToLeave && !this.safeToLeave) {
return new Promise((resolve,reject) => {
let confirm = this.alertCtrl.create({
title: 'Are you sure?',buttons: [{
text: 'OK',handler: () => {
this.allowedToLeave = true;
resolve();
},{
text: 'Cancel',handler: () => {
reject();
}
}],});
confirm.present();
});
}
});
}
但是,这里发生的是页面从导航堆栈中弹出,然后显示确认对话框.看起来ionViewCanLeave()不等待存储调用运行,因为它是异步的.
我怎么能绕过这个?