Javascript:一个接一个地执行函数
我需要一个接一个地执行3个函数(里面都包含回调函数)。我需要一个简单的解决方案,用最少的行数,解释如何做到这一点。没有HTML代码请。只有Javascript ES6 一个例子来解释我的问题Javascript:一个接一个地执行函数,javascript,node.js,Javascript,Node.js,我需要一个接一个地执行3个函数(里面都包含回调函数)。我需要一个简单的解决方案,用最少的行数,解释如何做到这一点。没有HTML代码请。只有Javascript ES6 一个例子来解释我的问题 function myFunction() { doJob1() { /* Callback function includes */ } doJob2() { /* Callback function includes */ } doJob3() { /* Callback fun
function myFunction() {
doJob1() { /* Callback function includes */ }
doJob2() { /* Callback function includes */ }
doJob3() { /* Callback function includes */ }
}
正如Seblor、georg、eibersji在评论中所说的,您可以通过承诺来实现,或者以回调的形式按顺序传递函数(虽然有点难看,但它会起作用)。但是,如果这是您唯一的问题,那么stackoverflow中已经有了这些问题的详细答案: (回调)
(承诺)问题似乎还不清楚,但我们假设你想要 doJob1(){/*回调函数包含*/}以首先执行此函数 doJob2(){/*回调函数包含*/}以在doJob1()完成后第二次执行 doJob3(){/*回调函数包括*/}最后执行这个doJob3() 在这里,使用承诺(确切地说是承诺链)在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.
});
关于兑现承诺
关于承诺链接谢谢您的帮助。因此,这就是我想要作为解决方案的代码
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();
}
新承诺(功能(解析、拒绝){
doJob1(()=>resolve(1));
}).然后(函数(结果){
console.log('Job1 completed',result);//1
返回新承诺((解决,拒绝)=>{/(*)
doJob2(()=>解析(结果*2))
});
}).then(函数(结果){//(**)
console.log('Job2 completed',result);//2
返回新承诺((解决、拒绝)=>{
doJob3(()=>解析(结果*2))
});
}).然后(函数(结果){
console.log('Job3 completed',result);//4
});
函数doJob1(para){//para是'()=>resolve(1)'
setTimeout(function(){para()},1000);//您可能有
}//这里有自己的代码
职能2(第2段){
setTimeout(function(){para()},3000);//您可能有
}//这里有自己的代码
职能doJob3(第3段){
for(var i=0;i<9999999;i++);//执行一些不同的代码
if(i>0)//与setTimeout类似
第()段;
}
在您的示例中,不清楚这会出现什么问题,当您调用myFunction时,它会按照在函数中定义的顺序调用doJob1()、doJob2()和doJob3()例程,有什么问题?您的问题确实不清楚,但我感觉您在寻找()最小的解决方案是doJob1()=>doJob2(doJob3))
,但我们确实需要更多的解释。看看我的意思是doJob1等包含异步函数。他们实际上是在向数据库读写数据,但这些活动应该按顺序进行。e、 g doJob1从一个表中读取一个字段,doJob2将其写入另一个表,等等。我希望你能理解。谢谢你,不是机器人,这很有帮助。@HarshaWickramasinghe欢迎你,但从现在开始,请尝试更详细和准确地阐述问题,未来的读者确实会了解问题的背景,以及如何以及用什么方法来解决问题。当然,我会尽我最大的努力。谢谢:)