async/await Promise.all Promise.race

async声明一个异步函数

1.自动将常规函数转换成Promise,返回值也是一个Promise对象

2.只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数

3.异步函数内部可以使用await

await暂停异步的功能执行

1.放置在Promise调用之前,await强制其他代码等待,直到Promise完成并返回结果

2.只能与Promise一起使用,不适合用于回调

3.只能在async函数内部使用

async函数完全可以看作多个异步操作,包装成的一个Promise对象,而await命令就是内部then命令的语法糖

async声明函数

//函数声明
async function foo(){
    //do something
}

//函数表达式
const foo = async function(){
     //do something
}

//对象方法

let o = {
    async foo(){
        //do something
    }
}

// 箭头函数
const foo = async () => {
    // do something
}

await

是async wait的缩写,它等待返回的是一个表达式,不管是不是Promise对象都可以,只是说如果返回的是Promise对象,执行的状态不一样;

await只能在async函数中使用

function sync() {
  setTimeout(() => {
    return 1
  }, 1000)
}

async function async1(){
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(1)
    }, 2000)
  })
}

async function test(){
  await sync() //undefined
  console.log(1)
}

关于await的返回值:

1.await后是一个promise对象,如果是resolve状态,值就是resolve参数;如果是reject状态,会将错误抛出

2.await后不是promise对象,则返回值就是该值的本身

注意:

1.容错:考虑await后面的promise运行结果可能是rejected,最好把await放入try{}catch{}中

2.await后的异步操作,如果彼此没有依赖关系最好同时触发

3.await只能在async函数值中,如果在普通函数中会报错

function fn() {
   return Promise.reject('error')
}

async function asyncFn() {
    try {
        await fn()
        console.log(1) // 如果上一行出错将直接跳到catch,不会执行到这里
    } catch(e) {
        console.log(e) // error
    }
}

Promise.all([promise1,promise2,promise3......]).then(result=>{}).catch()

用于将多个promise实例,包装成一个新的Promise实例,返回的实例就是普通的promise

接收一个数组作为参数,数组里面可以是Promise对象,也可以是别的值;只有Promise会等待状态改变

result是参数promise数组中所有promise结果组合成的数组

只有当所有子promise都完成,并且结果都是resolve,才走then

只要有一个子promise结果为reject,就走catch,返回值是第一个失败的子promise的结果

Promise.race([promise1,promise2,promise3......]).then(result=>{}).catch()

result为第一个执行成功的promise的resolve结果

只要有一个promise完成就结束了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值