Promise、Promise.all、Promise.race 分别怎么用?

Promise是ES6里新增的语法,一种异步编程的解决方案,比传统的解决方案回调函数和事件更加合理和强大,Promise有三种状态,分别是Pending(进行中),Fulfilled(已成功),Rejected(已失败),状态一旦发生变化就不能再发生改变,只能从一种状态变为另一种,例如:Pending -> Fulfilled,Pending -> Rejected。Promise构造函数接收一个函数,这个函数有两个固定的参数,分别是resolve和reject,这两个参数也是一个函数,我们通过调用resolve函数会使状态从Pending变为Fulfilled,将会执行then里面的第一个回调函数参数,调用reject函数的话会使状态从Pending变为Rejected,将会执行then里面的第二个回调函数参数,假如then里面只传了一个参数的话,我们也可以通过catch来进行回调。

new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("请求成功"); // 执行then里面的第一个回调函数
        //reject("error message"); // 执行then里面的第二个回调函数或执行catch里面的回调函数
      }, 1000);
    }).then(res => {
      console.log(res)
    }, err => {
      console.log(err)
    }).catch(err=>{
      console.log(err)
    })

Promise.all可以将多个Promise实例包装成一个新的Promise实例,这些Promise以数组的形式作为Promise.all的参数,要每个Promise都成功才会执行Promise.all的then的第一个参数函数回调,将这些Promise成功返回的结果以数组形式返回,只要有一个失败都会进行reject操作,返回的结果为第一个失败的Promise的结果。

Promise.all([
      new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve({
            name: 'why',
            age: 18
          })
        }, 2000);
      }),
      new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve({
            name: 'kobe',
            age: 19
          })
        }, 1000);
      })
    ]).then(results => {
      console.log(results);
    }).catch(err=>{
      console.log(err)
    })

Promise.race也是可以将多个Promise实例包装成一个新的Promise实例,同样的这些Promise以数组的形式作为Promise.race的参数,这些Promise实例哪个先发生状态改变就先返回哪个的结果,无论是进行了resolve操作还是reject操作,相当于是赛跑。

Promise.race([
      new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('请求成功')
        }, 1000);
      }),
      new Promise((resolve, reject) => {//第二个promise返回结果更快
        setTimeout(() => {
          resolve('请求失败')
        }, 500);
      })
    ]).then(results => {
      console.log(results);
    }).catch(err => {
      console.log(err);//最终调用了catch
    })

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值