<table class="text">
<tr class="li1"><td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 后执行 setTimeout(function () { callback && callback(); },1000); } function async() { console.log('async is run');//等待1秒后才执行 } process.nextTick(function () { foo(async); }); console.log('foo not run');//foo not run 先执行 用setImmediate() 实现异步 setImmediate(func); process.nextTick(callback),setImmediate(callback),setTimeout(callback,0)的区别与优先度 process.nextTick 会将回调函数保存于数组中,每轮循环都会将回调函数全部执行完,不会给其他异步事件执行的机会 nextTick是三个里面速度最快的 setImmediate 将回调函数保存于链表中,会在执行下一个event loop前给其他异步事件执行的机会 setTimeout(callback,0) 会将事件放到下一个循环中,所以会比nextTick慢 至于setTimeout和setImmediate之间谁更快,是不一定的 setTimeout(callback,0)基本会延迟4ms左右,setImmediate会延迟2ms左右. 但是setImmediate会先监控调用栈,当调用栈为空时将事件推入栈中,而此时setTimeout(callback,0)可能已经将事件推入栈中了,所以会有setImmediate比setTimeout(callback,0)慢的时候.