asyns/await

利用async和await,简化Promis使用,实现代码层面上同步

async

async一个关键字,用于声明一个异步函数

  1. async function pro() {
  2. return '我执行完了'
  3. }
  1. async函数默认返回一个Promise,Promise状态由函数执行的情况决定,和then函数一样

await

await 表达式用来等待一个Promise对象状态改变,并将成功的值赋值给右边表达式

  1. function fun() {
  2. return new Promise((resolve, reject) => {
  3. resolve(2)
  4. })
  5. }
  6. async function pro() {
  7. let result =await fun()
  8. console.log(result); // 2
  9. }

1.注意await后的Promise对象状态只能为成功否则,错误没人处理,抛出异常
2.如不确定await后的Promise对象状态,用try/catch包裹处理异常
3.await后的代码是异步的,默认会放入微队列中
4.await后的值如果是普通值,则将此值返回

宏任务与微任务

js是单线程必须执行完所有初始化代码,如果有回调则放入队列待执行

  1. console.log(1); // 1 4 7 5 2 3 6
  2. setTimeout(() => {
  3. console.log(2);
  4. Promise.resolve().then(() => {
  5. console.log(3)
  6. })
  7. });
  8. new Promise((resolve, reject) => {
  9. console.log(4);
  10. resolve(5)
  11. }).then((data) => {
  12. console.log(data);
  13. });
  14. setTimeout(() => {
  15. console.log(6);
  16. })
  17. console.log(7);

宏任务: 一个待执行的回调队列(先进先出) 比如: DOM事件回调, AJAX事件回调,定时器回调
微队列: 一个待执行的回调队列 比如:Promise事件回调

不同点, 每次执行宏任务时,都要将所有微任务一个一个勾到主线程执行

async,await和axios - 图1