执行顺序
- 同步代码
- promise 中的同步代码
- then 微任务中代码
- setTimeout 中的代码
async function executeTask(){
console.log("1、任务开始执行")
await toHandleOrderBet();
console.log("13、任务结束执行")
}
async function toHandleOrderBet(){
await _typeGoldPc();
await _commitBetByRequest();
}
async function _typeGoldPc(){
console.log("2、进入_typeGoldPc")
await waitForElementAndAct().then((resolve)=>{
console.log("5、我在这里等你完成", resolve);
});
console.log("6、执行完成_typeGoldPc");
}
async function _commitBetByRequest(){
console.log("7、进入_commitBetByRequest");
await waitForElementAndAct2(async () =>{
await new Promise((resolve)=>{
console.log("9、进入_commitBetByRequest定时器");
setTimeout(()=>{console.log("17、中间的定时器====");resolve();},1000);
console.log("10、设置了_commitBetByRequest定时器");
})
})
console.log("12、执行完成_commitBetByRequest");
}
async function waitForElementAndAct(){
console.log("3、进入第一个waitForElementAndAct");
return new Promise((resolve)=>{
const startTime = Date.now();
const intervalId = setInterval(() => {
if (Date.now() - startTime > 5000) {
clearInterval(intervalId);
setTimeout(() => {
console.log("16、任务执行:内部定时器", Date.now());
}, 800);
console.log("4、清理定时器111", Date.now());
resolve(true);
}
}, 300);
});
}
async function waitForElementAndAct2(fn){
console.log("8、进入第二个waitForElementAndAct2");
return new Promise((resolve)=>{
const startTime = Date.now();
const intervalId = setInterval(() => {
if (Date.now() - startTime > 5000) {
clearInterval(intervalId);
fn();
console.log("11、222清理定时器22", Date.now());
resolve();
}
}, 300);
});
}
async function main(){
await executeTask().then(()=>{
console.log("14、那我是什么吗");
});
console.log("15、executeTask任务执行完成");
}
main();