Node.js学习笔记:setImmediate与process.nextTick

通过process.nextTick注册的函数在当前这个事件循环中执行的函数执行完毕后立即执行,相当于把当前的同步代码执行完毕之后,立刻执行所有的通过process.nextTick注册的函数,如果注册的是多个,那么注册的函数会依次按顺序执行完毕;通过setImmediate注册的函数在下一个事件循环中执行,如果有多个,那么回依次执行。

 1 ‘use strict‘;
 2 const process=require(‘process‘);
 3
 4 process.nextTick(function(){
 5     console.log(‘1‘);
 6 });
 7
 8 setImmediate(function(){
 9     console.log(‘2‘);
10 });
11
12 process.nextTick(function(){
13     console.log(‘3‘);
14 });
15
16 setImmediate(function(){
17     console.log(‘4‘);
18 });

执行结果是1->3->2->4,其实这段代码相当于把所有通过process.nextTick注册的函数依次执行,然后把所有通过setImmediate注册的函数依次执行:

 1 (function(){
 2     console.log(‘1‘);
 3 })();
 4
 5 (function(){
 6     console.log(‘3‘);
 7 })();
 8
 9 (function(){
10     console.log(‘2‘);
11 })();
12
13 (function(){
14     console.log(‘4‘);
15 })();

从中可以看到process.nextTick的执行优先级比setImmediate高。

然后我们再看下面这段代码:

 1 ‘use strict‘;
 2 const process=require(‘process‘);
 3
 4 process.nextTick(function(){
 5     console.log(‘1‘);
 6 });
 7
 8 setImmediate(function(){
 9     console.log(‘2‘);
10     process.nextTick(function(){
11         console.log(‘3‘);
12     });
13
14     setImmediate(function(){
15         console.log(‘4‘);
16     });
17 });
18
19 process.nextTick(function(){
20     console.log(‘5‘);
21 });
22
23 setImmediate(function(){
24     console.log(‘6‘);
25     process.nextTick(function(){
26         console.log(‘7‘);
27     });
28
29     setImmediate(function(){
30         console.log(‘8‘);
31     });
32 });

执行结果是1->5->2->6->3->7->4->8,通过这个结果我们可以看出,同一个同步函数执行中添加的setImmediate注册的函数会依次执行,相当于拼接在一个setImmediate中一样。同样同一个同步函数执行中添加的process.nextTick注册的函数相当于拼接在一个process.nextTick中一样。

时间: 2024-10-12 22:52:56

Node.js学习笔记:setImmediate与process.nextTick的相关文章

Node.js学习笔记(3) - 简单的curd

这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简单介绍 这次demo,只涉及到简单的curd操作,用到的数据库是mongo,所以要安装mongo数据库,数据库连接驱动是mongoose: 当然关于mongo的驱动有很多,比如mongous mongoskin等:(详见http://cnodejs.org/topic/4f4ca8e0940ce2e

系列文章--Node.js学习笔记系列

Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql) Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识 Nodejs学习笔记(七)--- Node.js + Exp

Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)

笔记来自<Node入门>@2011 Manuel Kiessling JavaScript与Node.js Node.js事实上既是一个运行时环境,同时又是一个库. 使用Node.js时,我们不仅仅在实现一个应用,同时还实现了整个HTTP服务器. 一个基础的HTTP服务器 server.js:一个可以工作的HTTP服务器 var http = require("http"); http.createServer(function(request, response) { r

Node.js学习笔记【3】NodeJS基础、代码的组织和部署、文件操作、网络操作、进程管理、异步编程

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11

node.js学习笔记目录

1.node.js学习笔记(1)--Node.js简介及环境安装 2.node.js学习笔记(2)--使用Express快速创建应用 3.node.js学习笔记(3)--Express创建的项目分析 4.node.js学习笔记(4)--使用Express完成简单的登陆 5.node.js学习笔记(5)--MongoDB下载及安装 6.node.js学习笔记(6)--MongoDB简单入门 7.node.js学习笔记(7)--Node.js与MongoDB简单交互 8.node.js学习笔记(8)

node.js 学习笔记

学习网站:http://www.nodejs.net/a/20141016/232139.html: 笔记:介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网

node.js学习笔记5——核心模块1

Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node.js中的全局对象是global,所有的全局变量(除了global本身以外)都是global的属性. global 最根本的作用是作为全局变量的宿主. 全局变量的条件: (1)在最外层定义的变量; (2)全局对象的属性: (3)隐式定义的变量(未定义直接赋值的变量(strict模式下不可以)) 在Node.js中不可能在最外层定义变量,因为

Node.js学习笔记(4)——除了HTTP(服务器和客户端)部分

很多node入门的书里面都会在介绍node特性的时候说:单线程,异步式I/O,事件驱动. Node不是一门语言,它是运行在服务器端的开发平台,官方指定语言为javascript. 阻塞和线程: 线程在执行中如果遇到磁盘读写或网络通信(统称为 I/O 操作),通常要耗费较长的时间,这时操作系统会剥夺这个线程的 CPU 控制权,使其暂停执行,全力执行这个I/O操作,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞.当其他完成之后,系统再恢复它对cpu的控制权,继续执行,这就是同步I/O或者阻塞

node.js 学习笔记1-mocha

1.mocha是什么 mocha是一款流行的额JavaScript测试框架. 2.mocha的基本用法 1.使用npm 安装mocha包,我并没有选择全局安装.只是在mocha的文件夹里的Package.json添加mocha的依赖. 如下图 { "name": "mocha-test", "version": "0.0.1", "dependencies": { "koa": &quo