node.js提出了process.nextTick和setImmediate方法来处理异步任务
process.nextTick
process.nextTick(function A() {
console.log(1);
process.nextTick(function B(){console.log(2);});
});
setTimeout(function timeout() {
console.log('TIMEOUT FIRED');
}, 0)
process.next的回调函数总是在当前执行栈的所有任务执行完之后执行,所以所有的nextTick回调都会下一次开始新的执行调用栈执行之前全部执行
由于只能在当前执行栈执行完之后执行,所以process.next不能用于递归调用
setImmediate
setImmediate(function A() {
console.log(1);
setImmediate(function B(){console.log(2);});
});
setTimeout(function timeout() {
console.log('TIMEOUT FIRED');
}, 0);
setImmediate会在下一次执行调用栈之前执行
process.nextTick的执行效率比setImmediate高,因为它不用去检查下一次下一次执行调用栈的任务