zoukankan      html  css  js  c++  java
  • 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中一样。

  • 相关阅读:
    Bootstrap表格
    Bootstrap网格系统
    requestAnimationFrame动画方法
    拖放相关事件
    clientX、pageX、scrollLeft、offsetLeft、clientWidth、screen.width的用法和区别
    嵌套循环中break、continue的用法
    canvas关于getImageData跨域问题解决方法
    js中二维数组的初始化
    chrome/ie中图片底部多出几像素问题
    级联菜单
  • 原文地址:https://www.cnblogs.com/PolarisSky/p/5385065.html
Copyright © 2011-2022 走看看