宏任务:script代码 setInterval setTimeout new Promise
微任务:原生Promise.then()、process.nextTick、
执行顺序:先执行 宏任务当中的同步任务 --> 微任务当中的同步任务 --> 微任务当中的异步任务 --> 宏任务中的异步任务
以下代码执行顺序
const handleClick = () => {
console.log('iop');
new Promise((resolve, reject) => {
console.log('promise-1');
setTimeout(() => {
console.log('promise-timeeout');
}, 0)
process.nextTick(function () {
console.log('promise---process.nextTick-1');
})
resolve('222')
}).then((res) => {
setTimeout(() => {
console.log('promise-then-timeout');
}, 0)
console.log('promise-then');
process.nextTick(function () {
console.log('promise.then---process.nextTick-1');
})
})
console.log('iop3333');
setTimeout(() => {
console.log('timeout-222');
}, 0)
process.nextTick(function () {
console.log('process.nextTick-1');
})
}
<Button onClick={() => {
setTimeout(() => { // 异步
console.log('10');
}, 10);
getList({ page: 1, pageSize: 10, name: '' }).then((res) => {//数据请求
console.log('wancheng');
});
new Promise((resolve, reject) => {
console.log('promise');
resolve('hhelo');
}).then((res) => {
console.log('promie-then', res);
});
setTimeout(() => { // 异步
console.log('00');
}, 0);
console.log('hello');// 同步
}}
>点击
</Button>
//promise
//hello
// promie-then hhelo
// 00
// 10
// wancheng
new Promise((resolve, reject) => {
console.log('promise');
resolve('hhelo');
}).then((res) => {
console.log('promie-then', res);
});
new Promise((resolve, reject) => {
console.log('promise1');
resolve('hhelo1');
}).then((res) => {
console.log('promie-then', res);
});
//promise
//promise1
// promie-then hhelo
// promie-then hhelo1
<Button onClick={() => {
signatureConfigList({ page: 1, pageSize: 10 }).then((res) => {
console.log('then');
});
queueMicrotask(() => { // 微任务
console.log('hello');
});
console.log('tong');
}}
>点击
</Button>
//tong
// hello
// then
new Promise((resolve, rejec) => {
console.log('Promise');
resolve('new-promise-');
}).then((res) => {
console.log('Promise-then', res);
});
queueMicrotask(() => { // 微任务
console.log('hello');
});
console.log('tong');
//Promise
//index.tsx:252 tong
//index.tsx:246 Promise-then new-promise-
//index.tsx:249 hello
queueMicrotask(() => { // 微任务
console.log('hello');
});
console.log('tong');
new Promise((resolve, rejec) => {
console.log('Promise');//同步
resolve('new-promise-');
}).then((res) => { // 微任务
console.log('Promise-then', res);
});
//tong
// Promise
// hello
// Promise-then new-promise-
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start'); //1
setTimeout(function() {
console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
console.log('script start');
function getName() {
console.log('name');
}
async function a() {
console.log('async 1');
await getName();
console.log('async 1 end');
}
a();
setTimeout(() => {
console.log('setTimeout1');
}, 0);
setTimeout(() => {
console.log('setTimeout2');
});
new Promise((resolve, reject) => {
console.log('Promise');
resolve();
}).then(() => {
console.log('then');
}).catch(() => {
});
打印结果
script start
async 1
name
Promise
async 1 end
then
setTimeout1
setTimeout2
console.log('script start');
function getName() {
console.log('name');
}
setTimeout(() => {
console.log('setTimeout2');
});
async function a() {
console.log('async 1');
await getName();
console.log('async 1 end');
}
a();
setTimeout(() => {
console.log('setTimeout1');
}, 0);
new Promise((resolve, reject) => {
console.log('Promise');
resolve();
}).then(() => {
console.log('then');
}).catch(() => {
});
打印结果
script start
async 1
name
Promise
async 1 end
then
setTimeout2
setTimeout1