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 相关文章推荐
学习YUI.Ext第五日--做拖放Darg&Drop
Mar 10 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
Mar 05 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
Oct 10 Javascript
js实现拖拽效果(构造函数)
Dec 14 Javascript
javascript构造函数以及原型对象的理解
Jan 13 Javascript
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
浅谈JS的原型和继承
May 08 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 Javascript
生成无限制的微信小程序码的示例代码
Sep 20 Javascript
Vue3.0 手写放大镜效果
Jul 25 Vue.js
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/07/08 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
Python简单实现子网掩码转换的方法
2016/04/13 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
python 实现识别图片上的数字
2019/07/30 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
三星印度官网:Samsung印度
2019/08/03 全球购物
工地门卫岗位职责范本
2014/07/01 职场文书
接待员岗位职责
2015/02/13 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
总结Python连接CS2000的详细步骤
2021/06/23 Python
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL