setTimeout
// 输出顺序:script start->script end->settimeout
console.log("script start");
setTimeout(function(){
console.log("settimeout");
})
console.log("script end");
Promise
Promise 本身是同步的立即执行函数,当executor中执行resolve或者reject的时候,此时是异步操作,会先执行then/catch等,当主栈完成后,才会去调用resolve/reject中存放的方法执行,打印p的时候,是打印的返回结果,
// 输出顺序: script start->promise1->promise1 end->script end->promise2->settimeout
console.log('script start')
let promise1 = new Promise(function (resolve) {
console.log('promise1')
resolve()
console.log('promise1 end')
}).then(function () {
console.log('promise2')
})
setTimeout(function(){
console.log('settimeout')
})
console.log('script end')
async/await
// 输出顺序:script start->async1 start->async2->script end->async1 end
async function async1(){
console.log('async1 start');
await async2();
console.log("async1 end")
}
async function async2(){
console.log("async2");
}
console.log("script start")
async1();
console.log("script end")