我正在使用Ionic Framework 3构建应用程序。我想知道是否只有在加载其他函数时才可以调用一个函数。我对代码做了简化:
getNumberOne() {
//CODE TO GET NUMBER ONE//
this.getGraph; //CAUSE I WANT TO LOAD MY GRAPH//
}
getNumberTwo() {
//CODE TO GET NUMBER TWO//
this.getGraph; //CAUSE I WANT TO LOAD MY GRAPH//
}
getOtherData() {
getOtherDataOne() {
//CODE TO GET NUMBER//
this.getGraph; //CAUSE I WANT TO LOAD MY GRAPH//
}
getOtherDataTwo() {
//CODE TO GET NUMBER//
this.getGraph; //CAUSE I WANT TO LOAD MY GRAPH//
}
}
getGraph() {
//CODE TO LOAD THE GRAPH//
}
在我的示例中,函数“ getGraph”被触发4次,但是在我的实际代码中,它被触发42次。您还需要知道的另一点是,每个功能都没有链接。我的意思是,getNumberOne()不能确保成功,因为如果没有得到数字,那么它将返回错误。
这就是为什么我不认为我不能只将函数放在这样的函数中:
getNumberOne() {
/*Function to query*/
.then((sucess) => {
getNumberTwo() {
/*Function to query*/
.then((sucess) => {
getOtherData() {
getOtherDataOne() {
/*Function to query*/
.then((sucess) => {
getOtherDataTwo() {
/*Function to query*/
.then((sucess) => {
this.getGraph; //CAUSE I WANT TO LOAD MY GRAPH//
});
}
});
}
}
});
}
});
}
getGraph() {
//CODE TO LOAD THE GRAPH//
}
是否有优化的方法?
答案 0 :(得分:0)
您应该查看javascript中的Promise。特别是,似乎您想等待多个诺言完成之后再做某事。您应该使用Promise.all:
Promise.all([getNumberOne(), getNumberTwo()]).then((values) => {
this.getGraph();
});
async
函数和await
只是编写承诺的一种简化方法。因此,您可以将以上内容重写为:
async myAsyncFunc(){
await Promise.all([getNumberOne(), getNumberTwo()]);
this.getGraph();
}
编辑:
如果要让getNumberOne和getNumberTwo函数串行运行,只需执行以下操作:
async myAsyncFunc(){
await getNumberOne();
await getNumberTwo();
this.getGraph();
}