时间:2021-05-26
nodejs实现函数串行执行
众所周知,nodejs是用非阻塞异步io机制,也就是说函数执行完成的先后顺序和代码的编写的先后顺序可能不同,实际的顺序取决于一个函数自身执行的快慢。这就出现一个在nodejs中怎么编写串行执行也就是顺序执行代码的问题。试想,要是你写了2个函数,一个查询数据库,另一个返回查询的结果,要是不用串行执行那么还没等数据库查询完毕就返回了结果,这显然是不行的。因而串行执行在nodejs中很有用。那么怎么实现呢?
大家可能会说,将返回查询结果的函数写在查询数据库函数的回调函数里面就好了呀,但是有过开发经验的朋友一定知道,要是情况比较复杂时就会产生一个回调地狱的问题,即层层嵌套,最后都不知道自己写了些什么,可读性和维护性很差。
我们不防换个思路,要是将这些想要顺序执行的函数放到一个数组里面,当一个函数执行完毕时在执行数组里面的下一个函数不就行了嘛。其实,nodejs开源社区中的很多串行模块的基本思想就是这个。接下来我们一步一步完成这个串行的demo:
1.首先我们定义一个保存函数执行顺序的数值:
var tasks = [];2.再定义一个往数值里面加入串行化执行函数的函数:
function addTask(task){ tasks.push(task);}3.执行数组中下一个函数的函数:
function next(){ if(tasks.length > 0){ tasks.shift()(); }else{ return; }}ok,大功告成,接下来定义几个测试函数:
var task1 = function(){ console.log('task1 is finished'); next();}var task2 = function(){ console.log('task2 is finished'); next();}var task3 = function(){ console.log('task3 is finished'); next();}开始测试:
addTask(task1);addTask(task2);addTask(task3);next()换个顺序:
addTask(task1);addTask(task3);addTask(task2);next();ok,大功告成。基于这个思想,在实际开发中大家可以定义一个模块,将这个串行打包,再也不用害怕回调地狱问题啦。
还可以用第三方库,如async.
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本博客简介介绍一下java线程的join方法,join方法是实现线程同步,可以将原本并行执行的多线程方法变成串行执行的如图所示代码,是并行执行的publiccl
什么时候使用串行化?在网络中传输对象的时候向数据库中保存文件的时候今天我们要提到四个函数全部串行化1.serialize(对象名)将指定的类对象串行化$str=
解决回调函数嵌套太深,并行逻辑必须串行执行,一个Promise代表一个异步操作的最终结果,跟Promise交互的主要方式是通过他的then()方法来注册回调函数
在vue实例中,通过$mount()实现实例的挂载,下面来分析一下$mount()函数都实现了什么功能。$mount函数执行位置_init这个私有方法是在执行i
Nodejs回调加超时限制两种实现方法Nodejs下的IO操作都是异步的,有时候异步请求返回太慢,不想无限等待回调怎么办呢?我们可以给回调函数加一个超时限制,到