Javascript:一个接一个地执行功能

时间:2019-09-02 07:29:22

标签: javascript node.js

我需要执行3个函数(所有函数内部都包含一个回调函数),一个接一个。我需要一个简单的解决方案,以最少的行数来说明如何执行此操作。请没有HTML代码。仅Javascript ES6。

一个例子来说明我的问题。

function myFunction() {
    doJob1() { /* Callback function includes */ }
    doJob2() { /* Callback function includes */ }
    doJob3() { /* Callback function includes */ }
}

3 个答案:

答案 0 :(得分:0)

正如Seblor,georg,eibersji的评论中所述,您可以使用promise来实现,也可以按您的顺序将函数作为回调传递(虽然有点丑陋,但可以使用)。但是,如果这是您唯一的问题,那么stackoverflow中已经存在针对此类问题的详尽详尽的答案:

https://stackoverflow.com/a/5188020/9978135(回调)

https://stackoverflow.com/a/32733694/9978135(承诺)

答案 1 :(得分:0)

问题似乎还不清楚,但让我们假设您想要

  

doJob1(){/ *回调函数包括* /}首先要执行此函数

     
    

doJob2(){/ *回调函数包括* /},在doJob1()完成后第二次执行

         
      

doJob3(){/ *回调函数最后包含* /}这个doJob3()要执行。

    
  

然后在这里而不是逐行执行,而是使用Promises(恰好是Promise Chaining)在doJob1()之后执行第二个函数doJob2()。同样,完成doJob2()之后的doJob3()。

new Promise(function(resolve, reject) {

  //Code for executing function doJob1()

}).then(function(result) {

  #when doJob1() is finished.

  return new Promise((resolve, reject) => {
     //Code for executing function doJob2()
  });

}).then(function(result) {  
  #when doJob2() is finished.
  return new Promise((resolve, reject) => {
    //Code for executing function doJob3()
  });

}).then(function(result) {

 #when doJob3() is finished.

});

关于承诺的经历

About Promises

关于承诺链Promises Chaining

答案 2 :(得分:0)

非常感谢您的帮助。因此,这是我想要作为解决方案的代码。

new Promise(function(resolve, reject) {

    doJob1(() => resolve(1));

}).then(function(result) {

    console.log('Job1 completed',result); // 1
    return new Promise((resolve, reject) => { // (*)
        doJob2(() => resolve(result * 2 ))
    });

}).then(function(result) { // (**)

    console.log('Job2 completed',result); // 2
    return new Promise((resolve, reject) => {
        doJob3(() => resolve(result * 2 ))
    });

}).then(function(result) {

    console.log('Job3 completed',result); // 4

});

function doJob1 ( para ) {     // para is '() => resolve(1)'
    setTimeout(function(){ para() }, 1000); // u may have your 
}                                         // own code here

function doJob2 ( para ) {
    setTimeout(function(){ para() }, 3000); // u may have your 
}                                         // own code here

function doJob3 ( para ) {
    for(var i = 0; i < 999999999; i++); // some different code doing 
    if( i > 0)                          // similar thing as setTimeout  
    para();
}