题一
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(function() {
console.log("setTimeout0");
}, 0);
setTimeout(function() {
console.log("setTimeout3");
}, 3);
setImmediate(() => console.log("setImmediate"));
process.nextTick(() => console.log("nextTick"));
async1();
new Promise(function(resolve) {
console.log("promise1");
resolve();
console.log("promise2");
}).then(function() {
console.log("promise3");
});
console.log("script end");
输出:
script start
async1 start
async2
promise1
promise2
script end
nextTick
async1 end
promise3
check和timers谁先运行看系统运行环境
timers: 0- setTimeout0 3-setTimeout3
check: setImmediate
队列中:
nextTick: nextTick
promise: async1 end promise3
timers: 0- setTimeout0 3-setTimeout3
check: setImmediate
题二
setTimeout(() => {
console.log("setTimeout");
}, 0);
setImmediate(() => {
console.log("setImmediate");
});
谁先运行不一定。
题三
const fs = require("fs");
fs.readFile("./index.js", () => {
setTimeout(() => console.log(1), 0);
setImmediate(() => console.log(2));
});
肯定先2后1。
EventEmitter模块
node事件管理通用机制,内部维护多个事件队列。同步运行的。
const {EventEmitter} = require('events');
//创建一个事件处理对象
//可以注册事件,可以触发事件
const ee = new EventEmitter();
//注册事件
ee.on('xxx',()=>{
console.log('xxx事件触发了');
})
//触发名为'xxx'事件,会依次运行之前注册的事件
ee.emit('xxx');
//触发一次
ee.once('xxx');
//移除事件处理函数
ee.off('事件名',事件处理函数);