当前位置: 首页 > 后端技术 > Node.js

串联执行N个(未知)函数

时间:2023-04-03 16:09:14 Node.js

第一种方式直接遍历循环:这是最简单的方式。要串联执行多个函数,可以通过循环执行。代码如下://1leta1=function(next){console.log("a1");}leta2=function(next){console.log("a2");}leta3=function(next){console.log("a3");}让arr=[a1,a2,a3];arr.forEach(e=>e());第二种方式是按照洋葱结构构造代码结构,类似图:如何构造这样的代码,代码示例如下:leta1=function(next){console.log("a1");next()}让a2=function(next){console.log("a2");next()}leta3=function(next){console.log("a3");next()}让arr=[a1,a2,a3];让a=arr.reduce((a,b)=>{return()=>b(a)},()=>console.log("start"));A();观察源码,我们在定义函数的时候在函数旁边加了一个参数,next就是当前执行函数执行完后的下一个执行函数。经过reduce函数的处理,我们得到了函数a,函数a的函数体,我们可以用数学中的函数代入得到结果:functiona(){console.log("a3");(function(next){console.log("a2");(function(next){console.log("a1");(()=>console.log("start"))()})()})()}除了使用reduce,上面的代码还可以使用循环构造。代码如下:leta1=function(next){console.log("a1");next()}leta2=function(next){控制台。日志(“a2”);next()}leta3=function(next){控制台。日志(“a3”);next()}让arr=[a1,a2,a3];让a=()=>console.log("开始");for(leti=0;i{arr[i](next)}}a();a函数的最终结果和上面一样,只是方法不同。除了循环和reduce,我们还可以使用递归,代码如下:leta1=function(next){console.log("a1");next()}leta2=function(next){console.log("a2");next()}让a3=function(next){console.log("a3");next()}让arr=[a1,a2,a3];变种我=0;functionnext(){vartask=arr[i++];//取出函数数组中的下一个函数if(!task){//如果函数不存在,则returnreturn;}任务(下一个);//否则,执行下一个函数}next();递归调用的原理类似于构造回调函数,但是更倾向于更精简的执行,更倾向于边执行边构造,而不是上面两种方式。以上两个方法都是先构造后执行。阅读源码,我们定义了一个next函数,并使用一个全局变量i,i来标记执行的是哪个函数。下一次调用标志着递归调用的开始。每执行一次i,i都会自增,然后从数组中取出中间件执行。中间件执行时传入next,重复下一个调用循环。以上是串联执行N个(未知)函数的多种方式。应用最广泛的是js技术栈中的中间件,redux中间件,express中间件都是用到上面的方法,多操作,多思考,Minorimprovements每天进步一点点,希望对你有所帮助。