2017-10-16 82 views
5

Onay mesajını göstermek için ionViewCanLeave() navGuard kullanan bir İyonik 2 uygulamasına sahibim. Bu iyi çalışıyor; Kullanıcıya bir onay iletişim kutusu gösterilir ve eğer isterlerse çıkmamaya karar verebilirler. İşte bunun için kod: Ben şimdi storage burada ek bir değişkeni kontrol etmeniz gerekir2 vaatler nasıl yuvalanır ve ionViewCanLeave sonuç için bekleyebilir?

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

. Bu değişkeni elde etmek için bir söze ihtiyacım var. Olsa burada ne olur

// 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?', 
      message: 'Are you sure?', 
      buttons: [{ 
       text: 'OK', 
       handler:() => { 
       this.allowedToLeave = true; 
       resolve(); 
       }, 
      }, { 
       text: 'Cancel', 
       handler:() => { 
       reject(); 
       } 
      }], 
      }); 
      confirm.present(); 
     }); 
     } 
    }); 
    } 

sayfa gezinme yığınından attı ve daha sonra onay iletişim gösterildiğini aşağıdaki gibidir: Benim kodudur. ionViewCanLeave(), depolama çağrısının eşzamansız olduğu için çalışmasını beklemiyor gibi görünüyor.

Bunu nasıl aşabilirim?

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

de

diğer bilgiler sorunuzla ilgili Değil: 'if' koşul doğru olduğundan emin misin? "&&" yerine "||" değilse mi? Sadece değişkenlerin isimleri ile tahmin ... – trincot

+0

Sadece senin sorununun bir alerCtrl kullanarak bir sayfa terk etmesini engellemede bana yardımcı olduğunu söylemek istiyorum, çözmek için bana 4 gün süren bir sorun, teşekkürler – George

cevap

3

Sözünü dönmek gerekir. 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

Elbette ... bu sırayla . Özledim inanamıyorum :( – Mike

0

Promise.all() yöntemini kullanarak, kuyruk vaatleri bir göz atın: