-1

我需要一个接一个地执行 3 个函数(都包括一个回调函数)。我需要一个简单的解决方案,用最少的行数来解释如何做到这一点。请不要使用 HTML 代码。只有 JavaScript ES6。

一个例子来解释我的问题。

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

3 回答 3

0

正如 Seblor、georg、eibersji 的评论中所述,您可以使用 Promise 来完成,或者按照您的顺序将函数作为回调传递(有点难看,但它会起作用)。但是,如果这是您唯一的问题,那么这些问题的详细答案已经存在于 stackoverflow 中:

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

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

于 2019-09-02T07:43:46.687 回答
0

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

doJob1() { /* 回调函数包括 */ } 先执行这个函数

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

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

然后在这里,而不是逐行执行,仅在 doJob1() 之后使用 Promises 执行第二个函数 doJob2() (恰好是 Promise Chaining)。同样,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.

});

关于 Promise 经过

关于承诺

关于 Promise 链式Promise 链式

于 2019-09-02T07:49:32.027 回答
0

感谢 Not-A-Bot,感谢您的帮助。因此,这是我想要作为解决方案的代码。

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();
}
于 2019-09-02T11:13:25.743 回答