process.nextTick
回调函数同步执行
function asyncFake(data, callback) {
    if(data === 'foo') {
        callback(true);
    }else{
        callback(false);
    }
}
asyncFake('bar', function(result) {
    // this callback is actually called synchronously!
    console.log(result);
})
console.log("#############");
/*
运行结果:
false
#############*/
回调函数异步执行
process.nextTick()可以确保asyncReal的回调总是在其他同步代码(console.log("#############"))运行完成后,event loop开始前调用的
function asyncReal(data, callback) {
    process.nextTick(function() {
         callback(data === 'foo');
    });
}
asyncReal('bar', function(result) {
    console.log(result);
})
console.log("#############");
/*
运行结果:
#############
false*/
const EventEmitter = require('events');
const util = require('util');
function MyEmitter() {
    EventEmitter.call(this);
    // 使用nextTick,可以等待下面的同步代码,myEmitter.on('event',。。),执行完后,再触发event事件
    //如果不使用nextTick,直接触发event事件,myEmitter.on('event',。。)可能都没有执行,就不会对event事件处理
    process.nextTick(function() {
        this.emit('event');
    }.bind(this));
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
//对event事件的处理方法
myEmitter.on('event', function() {
    console.log('an event occurred!');
});
process.nextTick的更多相关文章
- 理解 Node.js 里的 process.nextTick()
		
有很多人对Node.js里process.nextTick()的用法感到不理解,下面我们就来看一下process.nextTick()到底是什么,该如何使用. Node.js是单线程的,除了系统IO之 ...
 - Node.js学习笔记:setImmediate与process.nextTick
		
通过process.nextTick注册的函数在当前这个事件循环中执行的函数执行完毕后立即执行,相当于把当前的同步代码执行完毕之后,立刻执行所有的通过process.nextTick注册的函数,如果注 ...
 - Node.js的process.nextTick(callback)理解
		
Node.js是单线程的,基于事件循环,非阻塞 IO的.事件循环中使用一个事件队列,在每个时间点上,系统只会处理一个事件,即使电脑有多个CPU核心,也无法同时并行的处理多个事件.因此,node.js适 ...
 - setTimeout,setInterval,process.nextTick,setImmediate in Nodejs
		
Nodejs的特点是事件驱动,异步I/O产生的高并发,产生此特点的引擎是事件循环,事件被分门别类地归到对应的事件观察者上,比如idle观察者,定时器观察者,I/O观察者等等,事件循环每次循环称为Tic ...
 - 比较setImmediate(func),setTimeout(func),process.nextTick(func)
		
node中的事件优先级机制: console.log('第一笔!'); process.nextTick(function() { console.log('吃个饭吧!'); setImmediata ...
 - setTimeout和setImmediate以及process.nextTick的区别
		
在javascript中我们了解到了setTimeout和setInterVal函数事件队列(任务队列)的相关知识,除了setTimeout和setInterval这两个方法外,Node.js还提供了 ...
 - node中定时器, process.nextTick(), setImediate()的区别与联系
		
1.定时器 setTimeout()和setInterval()与浏览器中的API是一致的,定时器的问题在于,他并非精确的(在容忍范围内).尽管事件循环十分快,但是如果某一次循环占用的时间较多,那么下 ...
 - js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)
		
javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环 ...
 - Node.js Event Loop 的理解 Timers,process.nextTick()
		
写这篇文章的目的是将自己对该文章的理解做一个记录,官方文档链接The Node.js Event Loop, Timers, and process.nextTick() 文章内容可能有错误理解的地方 ...
 
随机推荐
- centos下python3.6安装uwsgi失败。
			
报错信息(省略大部分): plugins/python/uwsgi_python.h::: fatal error: Python.h: No such file or directory #incl ...
 - volatile关键字的特性及证明
			
volatile是java虚拟机提供的轻量级的同步机制 JMM(Java内存模型)是围绕着并发编程中原子性.可见性.有序性这三个特征来建立的 原子性:一个操作或多个操作要么全部执行完成且执行过程不被中 ...
 - ASP.NET Core 使用 SignalR 遇到的 CORS 问题
			
问题 将 SignalR 集成到 ASP.NET Core MVC 程序的时候,按照官方 DEMO 配置完成,但使用 DEMO 页面建立连接一直提示如下信息. Access to XMLHttpReq ...
 - android学习笔记--AlarmManager
			
AlarmManager称呼为全局定时器,有的称呼为闹钟.其实它的作用和Timer有点相似. 都有两种相似的用法: (1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager ...
 - perl学习笔记---标量
			
1.perl 输出时,使用 逗号,连接多个字符串 如:print “The answer is ”,6*7, “.\n” 2.当一个字符串由双引号括起来时,如果变量前没有反斜线,则变量会被其值内插 $ ...
 - Vue 进阶之路(一)
			
vue 3.x 马上就要问世了,显然尤大大是不想让我们好好活了,但是转念一想,比你优秀的人都还在努力,那我们努力还有什么用,开个玩笑而已,本人对于 vue 的接触时间不长,对其也没有深入地去研究源码, ...
 - docker安装Oracle 12c
			
1.安装阿里的docker源: cat /etc/docker/daemon.json { "registry-mirrors": ["https://pee6w651. ...
 - 处理SQL Server中的重复行
			
如果表中的数据需要基于行中的多个值具有唯一约束,则适合的解决方案将是复合健. 复合主键 使用SQL Server语法创建符合主键非常简单. create table my_parts ( id_par ...
 - Elasticsearch Java高级客户端
			
1. 概述 Java REST Client 有两种风格: Java Low Level REST Client :用于Elasticsearch的官方低级客户端.它允许通过http与Elastic ...
 - 『集群』003 Slithice 最简分布式(多个客户端,一个独立服务端)
			
Slithice 最简分布式(多个客户端,一个独立服务端) 案例Demo 展示: 我们搭建一个 可以 独立运行 的 服务端:然后 多个客户端 并发链接 这个 服务端 完成 分布式逻辑: 服务器 独立运 ...