2017-06-16 75 views
0

林與承諾,我想我明白這個概念,但我的項目這不工作,奮力爲什麼我的諾言不做這項工作?

這裏有點我的代碼:

(我編碼TypeScirpt與角2和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 :

testStatutloadStatut之前發送responde,我需要有相反的。

我嘗試用其他功能來測試和它的工作:

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

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

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

Result : 下面的代碼是合法的test1然後test2

回答

2

我如下更改您的代碼,嘗試

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

謝謝,這是工作,你能解釋你的改變嗎? – Falender

+0

當你鏈接時,你應該總是返回諾言,'this.storage.get(「foo」)'返回一個'Promise'並且因爲那個諾言返回了你的'ngOnInit'的'Promise.resolve'將會起作用。 –

+0

@Flender,是的,camaron解釋說 – RezaRahmati