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 相关文章推荐
解析jquery中的ajax缓存问题
Dec 19 Javascript
JQuery下拉框应用示例介绍
Apr 23 Javascript
bootstrap datetimepicker2.3.11时间插件使用
Nov 19 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
vue 优化CDN加速的方法示例
Sep 19 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 jQuery
vue图片上传本地预览组件使用详解
Feb 20 Javascript
微信小程序indexOf的替换方法(推荐)
Jan 14 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 Javascript
js实现超级玛丽小游戏
Mar 18 Javascript
简单了解vue 插值表达式Mustache
Jul 22 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连接MySQL代码的参数说明
2008/06/07 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
php查看当前Session的ID实例
2015/03/16 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
vue中appear的用法
2017/08/17 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
Python实现Youku视频批量下载功能
2017/03/14 Python
Python实现学生成绩管理系统
2020/04/05 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
python区分不同数据类型的方法
2019/10/14 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
电钳专业个人求职信
2014/01/04 职场文书
2014年教务处工作总结
2014/12/03 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书