繁体   English   中英

离子3在构造函数中许诺功能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM