Node.js中的process.nextTick使用实例


Posted in Javascript onJune 25, 2015

我已经不记得是在哪里第一次看到process.nextTick这个玩意的调用了,哦,应该是在nodejs官方的process文档里看到的。当时就不理解这东西是干嘛的了,都已经有setTimeout了,还需要这个函数干嘛。而且从根本上来说,这个函数又是干嘛的?和setTimeout有什么区别?

stackoverflow上有一个非常好的帖子基本上解释了我的问题,这里我附上链接,然后给出它里面的范例:

stackoverflow.com >> What are the proper use cases for process.nextTick in Node.js?

var MyConstructor = function() {
 ...
 process.nextTick(function() {
  self._continue();
 });
};
 
MyConstructor.prototype.__proto__ = EventEmitter.prototype;
 
MyConstructor.prototype._continue = function() {
 // without the process.nextTick
 // these events would be emitted immediately
 // with no listeners. they would be lost.
 this.emit('data', 'hello');
 this.emit('data', 'world');
 this.emit('end');
};
 
function(req, res, next) {
 var c = new MyConstructor(...);
 c.on('data', function(data) {
  console.log(data);
 });
 c.on('end', next);
}

 

简单来说就是因为异步模型的关系,导致某些代码的执行可能先于它们所需要的条件完成之前,所以将这些需要先置条件的代码放入到一个回调函数中,然后放入到下一个事件循环的顶层。那么这些代码就不会被立刻执行了,而是在下一轮事件启动之前等待,启动后在进行执行。

Javascript 相关文章推荐
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
Ajax执行顺序流程及回调问题分析
Dec 10 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
May 07 Javascript
Javascript中实现trim()函数的两种方法
Feb 04 Javascript
jquery实现定时自动轮播特效
Dec 10 Javascript
Bootstrap学习笔记之css样式设计(1)
Jun 07 Javascript
AngularJS Ajax详解及示例代码
Aug 17 Javascript
微信小程序与php 实现微信支付的简单实例
Jun 23 Javascript
微信小程序显示下拉列表功能【附源码下载】
Dec 12 Javascript
Vue Components 数字键盘的实现
Sep 18 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
JavaScript 原型与原型链详情
Nov 02 Javascript
Ajax中解析Json的两种方法对比分析
Jun 25 #Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 #Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 #Javascript
深入理解JavaScript编程中的原型概念
Jun 25 #Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 #Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 #Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 #Javascript
You might like
PHP概述.
2006/10/09 PHP
php统计文章排行示例
2014/03/04 PHP
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
解析Python中的异常处理
2015/04/28 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python中的集合类型知识讲解
2015/08/19 Python
Python采用Django开发自己的博客系统
2020/09/29 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
房地产开发计划书
2014/01/10 职场文书
高级编程求职信模板
2014/02/16 职场文书
《云雀的心愿》教学反思
2014/02/25 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
Python机器学习之PCA降维算法详解
2021/05/19 Python
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android