event loop
遇微推入微队列,遇宏推入宏队列
macro 中有未执行完毕的 micro 则会等待 micro 执行完毕
宏任务包含微任务的时候会在宏任务中同步任务执行后执行所有微任务
微任务中遇到宏任务时不会等待宏任务,而是直接把宏任务推入宏任务队列中
macro
script 本身
各种请求
计时器
micro
Promise.then()
async/await
process.nextTick
测试一下
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| const p = new Promise((resolve, reject) => { setTimeout(() => { resolve(); }); }); const p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve(); }); }); const p3 = new Promise((resolve, reject) => { resolve("5"); }); const p4 = new Promise((resolve, reject) => { reject("6"); });
p.then(() => { console.log("1"); }).then(() => { console.log("2"); }); p2.then(() => { console.log("3"); }); p.then(() => { console.log("4"); }); p3.then((res) => { console.log(res); return "7"; }).then((res) => { console.log(res); }); p4.then(null, (res) => { console.log(res); }); p3.then((res) => { console.log("8"); });
|