asyns/await
利用async和await,简化Promis使用,实现代码层面上同步
async
async
一个关键字,用于声明一个异步函数
async function pro() {
return '我执行完了'
}
- async函数默认返回一个Promise,
Promise
状态由函数执行的情况决定,和then函数一样
await
await 表达式用来等待一个Promise对象状态改变,并将成功的值赋值给右边表达式
function fun() {
return new Promise((resolve, reject) => {
resolve(2)
})
}
async function pro() {
let result =await fun()
console.log(result); // 2
}
1.注意await后的Promise对象状态只能为成功否则,错误没人处理,抛出异常
2.如不确定await后的Promise对象状态,用try/catch
包裹处理异常
3.await后的代码是异步的,默认会放入微队列中
4.await后的值如果是普通值,则将此值返回
宏任务与微任务
js是单线程必须执行完所有初始化代码,如果有回调则放入队列待执行
console.log(1); // 1 4 7 5 2 3 6
setTimeout(() => {
console.log(2);
Promise.resolve().then(() => {
console.log(3)
})
});
new Promise((resolve, reject) => {
console.log(4);
resolve(5)
}).then((data) => {
console.log(data);
});
setTimeout(() => {
console.log(6);
})
console.log(7);
宏任务: 一个待执行的回调队列(先进先出) 比如: DOM事件回调, AJAX事件回调,定时器回调
微队列: 一个待执行的回调队列 比如:Promise事件回调
不同点, 每次执行宏任务时,都要将所有微任务一个一个勾到主线程执行