zoukankan      html  css  js  c++  java
  • nodejs中的异步回调机制

    1.再次clear Timer定时器的作用

    setTimeOut绝非是传统意义上的“sleep”功能,它做不到让主线程“熄火”指定时间,它是用来指定:某个回调在固定时间后插入执行栈!(实际执行时间略长于这个固定时间)

    2.js或nodejs想"sleep"主线程怎么做?

    可以自定义sleep休眠函数,原理就是 目标时间 >= 当前时间+sleepTime; 然后不断在while中tick时间、比较。直接看代码吧。

    function sleep(numbermsec){
      let now = new Date().getTime();
      let desc = now+numbermsec;
      while( now<desc ){
        now = new Date().getTime();
      }
    }

    3.js/nodejs的回调到底什么时候执行?可以回调了就执行还是等主线程执行完才执行?做个实验验证一下。

    const fs = require('fs');
    //异步读文件
    fs.readFile( __dirname+'/15_fs.js','utf8',(err,data) =>{
      if( err ){
        console.log( 'whoops!' );
        throw err;
      }else{
        console.log( 'success!' );
      }
    } );
    //异步执行setTimeout
    setTimeout(() => {
      console.log( 'settimeout!' );
    }, 1000);
    console.log( 'time1:'+new Date().getTime() );
    //主程序sleep休眠
    function sleep(numbermsec){
      let now = new Date().getTime();
      let desc = now+numbermsec;
      while( now<desc ){
        now = new Date().getTime();
      }
    }
    sleep(3000);
    //主程序执行同步读文件操作
    let buf = fs.readFileSync(__dirname+'/15_fs.js','utf8');
    console.log( buf );
    console.log( 'time2:'+new Date().getTime() );

    打印结果:

    打印结果分为5部分,从上到下5种颜色,分别标记为1,2,3,4,5:

    1.打印主程序的第一个时间戳:time1

    2.主程序的同步读文件操作并打印

    3.打印主程序的第二个时间戳,time2,很清晰的看到2、3的执行时间比1晚了大约3000ms

    4.执行异步的setTimeout回调函数

    5.执行异步读文件的回调函数

    综上分析可知:

    js/nodejs的异步操作是在“整个主程序”都解析执行完毕之后,才执行!

     ——学无止境,保持好奇。May stars guide your way.

    路漫漫其修远兮,吾将上下而求索。 May stars guide your way⭐⭐⭐
  • 相关阅读:
    线程的资源释放(一)
    iOS开发完整项目
    iOS开发多线程技术方案
    Windows 7 Beta泄漏版存在安全问题 狼人:
    工信部:黑客入侵等是网络安全防护工作的重点 狼人:
    微软下周2将发布13个补丁 修复26个安全漏洞 狼人:
    调查显示互联网14%SSL认证不安全 狼人:
    09年恶意软件放缓 2010年共享最危险 狼人:
    IE曝新安全漏洞 千万网民隐私遭受威胁 狼人:
    安全关注:2009年信息安全八大预测 狼人:
  • 原文地址:https://www.cnblogs.com/surfer/p/10292456.html
Copyright © 2011-2022 走看看