2017-06-16 6 views
0

Im mit Versprechen zu kämpfen Ich glaube, ich das Konzept zu verstehen, aber für mein Projekt diese nicht funktionieren,Warum mein Versprechen nicht den Job machen?

hier ein bisschen meines Code:

(Ich bin Codierung in TypeScirpt mit kantigen 2 und 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 eine responde vor loadStatut und ich brauche zu senden, das Gegenteil haben.

Ich versuche, mit anderer Funktion zu testen und es ist Arbeit:

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

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

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

Result : Hier ist der Code ist echt test1 dann test2

Antwort

2

ich Code wie unten ändern, versuchen Sie, dass

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

Danke, es ist Arbeit, kannst du deine Veränderung erklären? – Falender

+0

Sie sollten immer das Versprechen zurückgeben, wenn Sie verketten, 'this.storage.get (" foo ")' gibt ein 'Versprechen 'zurück und aufgrund dieses Versprechens kehrt die' Promise.resolve' von 'ngOnInit' wieder. –

+0

@Flender, ja, Camaron hat das erklärt – RezaRahmati