async与await


async 是“异步”的简写,而 await 可以认为是 async wait 的简写。await 只能出现在 async 函数中。async 用于申明一个 function 是异步的,而 await 操作符用于等待异步执行完毕。


async起什么作用

用于声明函数是一个异步函数。 声明的方式

//异步函数的声明方式
async function f1(){}
let fn2=async function(){}
let fn3=async()=>{}

async用于返回/输出的是一个 Promise 对象。 如果没有return 则默认返回 Promise.resolve() Promise.resolve方法允许调用时不带参数,直接返回一个resolved状态的 Promise 对象。

默认return Promise.resolve()

return 常量 等于 return Promise.resolve('常量')

await起什么作用

await 是在等待一个 async函数(异步函数)执行完成之后的一个返回值,后面跟直接量或者普通函数都是可以的(不过这时候的await就是个摆设 没什么用的),如果等到的返回值是Promise.resolve(变量),await还会直接 resolve函数传出来的值。await等待的时候就不会执行后面的语句。

return 常量 等于 Promise.resolve('常量')

await语句后的Promise对象变成reject状态时,那么整个async函数会中断,后面的程序不会继续执行
//await  只能等待成功的状态   失败需要抛出异常
 async function f3() {
  try {
    var z = await Promise.reject(30);
  } catch (e) {
    console.log(e); // 30
  }
}

结合 asiox 使用

asiox 返回的就是一个promise实例,可以直接使用 await

axios 使用 await

结合 Promise.all方法,Promise.race方法

Promise.all全部resolve才算resolve,Promise.race 谁的状态先改变,先返回谁 无论是resolve还是reject(如果时间一样,数组中排前面的先触发);all和race的参数都是一个数组,两个方法返回的都是promise对象,是个异步;

Promise.all 使用 await

async、await与setTimeout结合使用 sleep

await并不能等到setTimeout,如果没有return 那么默认返回 undefined

return 常量 等于 Promise.resolve('常量')

休眠n秒以后执行其后面的语句

//sleep  
function sleep (s) {
      return new Promise((resolve) => setTimeout(resolve, s*1000));
},
async function doit(){
  await sleep(2);
  // 等两秒后执行别的
}
doit();
posted @ 2021-03-24 23:47  雨天。我  阅读(921)  评论(0)    收藏  举报