JavaScript — 运行机制

单线程

js是单线程,为了防止一个函数执行时间过长阻塞后面的代码。会先将同步代码放入执行栈中,再执行nextTick,再将异步代码加入异步队列中,异步队列分为微队列(Promise.then),宏队列(setTimeout ,setInterval,ajax,读取文件),然后再setImmediate

js执行步骤

  1. 同步(promise内部的执行也是同步)
  2. process.nextTick
  3. 微任务(Promise.then)
  4. 宏任务(setTimeout ,setInterval,ajax,读取文件)
  5. setImmediate(计数器放在运行栈内,第一次栈内的事情循环加载完后就会触发)
例子:
	setImmediate(()=>{
	  console.log(1)
	})
	console.log(2)
	setTimeout(()=>{console.log(3)},0)//第一次放入任务队列中,事件循环加载,然后走setImmediate
	setTimeout(()=>{console.log(4)},100)//100毫秒后第二次放入任务队列中,所以这个打印在setImmediate后
	console.log(5)
	new Promise((resolve)=>{
	  console.log(6) // 同步
	  resolve() 	// 加这个,promise才会走then方法
	}).then(()=>{
	  console.log(7)
	})
	process.nextTick(()=>{
	  console.log(8)
	})
输出:2、5、6、8、7、3、1、4
上一篇:Node.js事件循环


下一篇:vue Promise异步操作