Javascript:一个接一个地执行函数



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

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

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

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

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.
});

关于承诺通过

关于承诺

关于承诺链接承诺链接

正如Seblor,georg,eibersji的评论中所述,您可以使用promises来做到这一点,或者将订单中的函数作为回调传递(有点丑陋,但它会起作用(。但是,如果这是您唯一的问题,那么堆栈溢出中已经存在此类问题的伟大而详细的答案:

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

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

感谢 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();
}

最新更新