Nodejs中怎么实现函数的串行执行


Posted in NodeJs onMarch 02, 2019

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()

Nodejs中怎么实现函数的串行执行

换个顺序:

addTask(task1);
addTask(task3);
addTask(task2);
next();

Nodejs中怎么实现函数的串行执行

ok,大功告成。基于这个思想,在实际开发中大家可以定义一个模块,将这个串行打包,再也不用害怕回调地狱问题啦。

还可以用第三方库,如async.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

NodeJs 相关文章推荐
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
NodeJS制作爬虫全过程
Dec 22 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
Sep 18 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
图解NodeJS实现登录注册功能
Sep 16 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 NodeJs
详解NodeJS模块化
Jun 15 NodeJs
Nodejs让异步变成同步的方法
Mar 02 #NodeJs
nodejs使用async模块同步执行的方法
Mar 02 #NodeJs
NodeJS实现同步的方法
Mar 02 #NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 #NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 #NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 #NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 #NodeJs
You might like
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
服务员岗位职责
2014/01/29 职场文书
爱我中华教学反思
2014/04/28 职场文书
护理目标管理责任书
2014/07/25 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
2014年双拥工作总结
2014/11/21 职场文书
通讯稿格式及范文
2015/07/22 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
Python操作CSV格式文件的方法大全
2021/07/15 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android