[英]Ionic 3 make promise funtion in constructor
我们如何在构造函数中创建一个promise函数,该函数逐行运行并等待结果,然后转到下一行。 目前,我的promise函数未运行,并且最后运行。
constructor(){
console.log("Start");
this.getData();
console.log("End");
}
getData() {
return new Promise(data => {
this.db.database.ref().child('/category').orderByChild('parent_id').
equalTo(this.idn).once('value').then(function (snapshot) {
console.log("Mid")
})
});
}
上面的输出是
Start
End
Mid
预期输出为
Start
Mid
End
为了澄清起见,您的promise函数不会最后运行。 如预期的那样,它在“开始”之后和“结束”之前开始。 它恰好在最后完成 。 这是因为它是设计上的“异步”调用。 (异步==非阻塞意味着程序不等待它完成。在您的示例中,它仅移至下一条语句console.log(“ End”)。)
顺便说一句,在Ctor中调用诸如“ getData()”之类的方法不是一个好习惯。 您可能想要在ngOnInit()
类的Angular生命周期方法中执行此操作。
由于getData函数返回一个Promise,因此将其解析并将控制台放入其中
constructor(){
console.log("Start");
this.getData().then(function (snapshot) {
console.log("End");
})
}
在Constructor中调用getData()方法不是一个好习惯,并且会损害应用程序的性能。 我建议使用ionViewDidLoad代替ionic,这是几乎所有情况下都需要的。
ionViewDidLoad(){
console.log("Start");
this.getData();
}
getData() {
return new Promise(data => {
this.db.database.ref().child('/category').orderByChild('parent_id').
equalTo(this.idn).once('value').then(function (snapshot) {
console.log("Mid"),
//put the code you want to execute after Mid here
console.log("End");
})
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.