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

 更新时间:2019年03月02日 11:27:51   作者:编码的哲哲  
今天小编就为大家分享一篇关于Nodejs中怎么实现函数的串行执行,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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.

总结

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

相关文章

  • Node环境中JS代码缺少window对象的原因和解决方案

    Node环境中JS代码缺少window对象的原因和解决方案

    你可能会在某些情况下需要在Node环境下运行JavaScript代码,但你也可能会遇到一个常见的问题:缺少window环境,在本文中,我们将深入探讨这个问题的原因,并提供解决方案,需要的朋友可以参考下
    2023-08-08
  • Nodejs使用Mongodb存储与提供后端CRD服务详解

    Nodejs使用Mongodb存储与提供后端CRD服务详解

    这篇文章主要给大家介绍了关于Nodejs使用Mongodb存储与提供后端CRD服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • 浅谈Node.js爬虫之网页请求模块

    浅谈Node.js爬虫之网页请求模块

    本篇文章主要介绍了浅谈Node.js爬虫之网页请求模块,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Node的事件处理和readline模块详解

    Node的事件处理和readline模块详解

    这篇文章主要为大家详细介绍了Node的事件处理和readline模块,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • nodejs解析xml文件方式(xml->json)

    nodejs解析xml文件方式(xml->json)

    这篇文章主要介绍了nodejs解析xml文件方式(xml->json),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Nodejs脚本快速导出MySQL数据库数据

    Nodejs脚本快速导出MySQL数据库数据

    在数据库管理和数据迁移的过程中,常常需要将数据库中的表数据和结构进行导出,本文将使用Node.js编写一个脚本实现快速从MySQL数据库中导出所有表的数据和结构,并保存为单独的SQL文件,需要的可以参考下
    2024-10-10
  • npm dose not support Node.js v10.15.3的解决方法

    npm dose not support Node.js v10.15

    这篇文章主要给大家介绍了关npm dose not support Node.js v10.15.3的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • node.js微信公众平台开发教程

    node.js微信公众平台开发教程

    这篇文章主要为大家分享了node.js微信公众平台开发教程,如何进行微信开发,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • node+express+axios实现单文件上传功能

    node+express+axios实现单文件上传功能

    这篇文章主要为大家详细介绍了node+express+axios实现单文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Node.js+express+socket实现在线实时多人聊天室

    Node.js+express+socket实现在线实时多人聊天室

    这篇文章主要为大家详细介绍了Node.js+express+socket实现在线实时多人聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论