2017-06-16 1 views
0

Im aux prises avec la promesse que je pense que je comprends le concept, mais pour mon projet ce ne fonctionne pas,Pourquoi ma promesse Ne fais pas le travail?

Voici un peu de mon code:

(je codage en TypeScirpt avec angulaire 2 et Ionic2)

ngOnInit() { 
    Promise.resolve(this.loadStatut()).then(() => this.testStatut()); 
} 

testStatut() { 
    if (this.admin !== undefined) { 
    this.navCtrl.push(ConnectPage); 
    } else { 
    console.log("Undefined") 
    } 
} 

admin; 
loadStatut() { 
    this.storage.get('admin').then((val) => { 
    this.admin = val; 
    console.log(this.admin) 
    }); 
} 

Result :

testStatut envoyer un Responde avant loadStatut et je dois avoir le contraire.

J'essaie de tester d'autres fonctions et il y a du travail:

ngOnInit() { 
    Promise.resolve(this.test1()).then(() => this.test2()); 
} 

test1() { 
    console.log("1") 
} 

test2() { 
    console.log("2") 
} 

Result : Voici le code est légitime test1 alors test2

Répondre

2

je change votre code comme ci-dessous, essayez que

ngOnInit() { 
    this.loadStatut().then(() => this.testStatut()); 
} 

testStatut() { 
    if (this.admin !== undefined) { 
    this.navCtrl.push(ConnectPage); 
    } else { 
    console.log("Undefined") 
    } 
} 

admin; 
loadStatut() { 
    return this.storage.get('admin').then((val) => { 
    this.admin = val; 
    console.log(this.admin) 
    }); 
} 
+0

Merci, c'est du travail, pouvez-vous expliquer votre changement? – Falender

+0

Vous devez toujours renvoyer la promesse lorsque vous enchaînez, 'this.storage.get (" foo ")' renvoie une 'Promise' et à cause de cette promesse retournée 'Promise.resolve' de votre' ngOnInit' fonctionnera. –

+0

@Flender, ouais camaron a expliqué que – RezaRahmati