2017-06-16 72 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