nodejs中的异步回调机制
Posted sophel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.
以上是关于nodejs中的异步回调机制的主要内容,如果未能解决你的问题,请参考以下文章