Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:一个接一个地执行函数_Javascript_Node.js - Fatal编程技术网

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

Javascript:一个接一个地执行函数,javascript,node.js,Javascript,Node.js,我需要一个接一个地执行3个函数(里面都包含回调函数)。我需要一个简单的解决方案,用最少的行数,解释如何做到这一点。没有HTML代码请。只有Javascript ES6 一个例子来解释我的问题 function myFunction() { doJob1() { /* Callback function includes */ } doJob2() { /* Callback function includes */ } doJob3() { /* Callback fun

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

一个例子来解释我的问题

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欢迎你,但从现在开始,请尝试更详细和准确地阐述问题,未来的读者确实会了解问题的背景,以及如何以及用什么方法来解决问题。当然,我会尽我最大的努力。谢谢:)