javascript – 如何嵌套2个promises并让ionViewCanLeave等待结果?

前端之家收集整理的这篇文章主要介绍了javascript – 如何嵌套2个promises并让ionViewCanLeave等待结果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@

我有一个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()不等待存储调用运行,因为它是异步的.

我怎么能绕过这个?

最佳答案
你需要回复承诺:

return this.storage.get( /* ...etc
^^^^^^                             */

猜你在找的JavaScript相关文章