仅在加载了其他函数(JS / TS)的情况下调用函数

时间:2018-06-28 15:06:46

标签: javascript typescript ionic-framework callback ionic3

我正在使用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//
}

是否有优化的方法?

1 个答案:

答案 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();
}