我需要执行3个函数(所有函数内部都包含一个回调函数),一个接一个。我需要一个简单的解决方案,以最少的行数来说明如何执行此操作。请没有HTML代码。仅Javascript ES6。
一个例子来说明我的问题。
function myFunction() {
doJob1() { /* Callback function includes */ }
doJob2() { /* Callback function includes */ }
doJob3() { /* Callback function includes */ }
}
答案 0 :(得分:0)
正如Seblor,georg,eibersji的评论中所述,您可以使用promise来实现,也可以按您的顺序将函数作为回调传递(虽然有点丑陋,但可以使用)。但是,如果这是您唯一的问题,那么stackoverflow中已经存在针对此类问题的详尽详尽的答案:
答案 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.
});
关于承诺的经历
关于承诺链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();
}