2017-10-16 12 views
5

ionViewCanLeave() navGuardを使用して確認メッセージを表示するIonic 2アプリがあります。これは問題なく動作します。ユーザーに確認ダイアログが表示され、必要に応じて退室しないように選択できます。ここではそのためのコードは次のとおりです。2つの約束を入れ子にして、ionViewCanLeaveで結果を待つことができますか?

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

私は今storageから、ここで追加の変数をチェックする必要があります。その変数を得るために私は約束が必要です。私のコードは次のようになります:

ここでは、ページがナビゲーションスタックからポップされ、確認ダイアログが表示されます。 ionViewCanLeave()は非同期であるため、ストレージの呼び出しが実行されるのを待っていないようです。

どうすればこの問題を回避できますか?

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

詳細情報は、あなたの質問に関連していない:あなたは 'if'条件が正しいことを確認していますか? '&&'ではなく' || 'でなくてはなりませんか?ただ変数の名前で推測する... – trincot

+0

私はちょうどあなたの質問は、alerCtrlを使用してページの休暇を防ぐのに役立ったと言いたい、解決するために私に4日かかった問題 – George

答えて

3

あなたが約束を返す必要があります。 link

let promises = []; 

promises.push(asynchroniousFunction); 
promises.push(AnotherAsynchroniousFunction); 

Promise.all(promises).then((results) => { 
    console.log('Data from first method', results[0]); 
    console.log('Data from second method', results[1]); 
}).catch((error) => { 
    console.log('Error from first method', error[0]); 
    console.log('Error from second method', error[1]); 
}); 
+0

もちろん...それはソートされている。私はそれを逃したと信じられない:( – Mike

0

はPromise.all()メソッドを使用して、キューイングの約束を見てみてください。

関連する問題