【前端自学(7)】Promise基础

文章目录


1 Promise

  • Promise.all 和 Promise.race
const promiseClick1 = () => {
  let p = new Promise((resolve, reject)=>{
    setTimeout(()=> {
      var num = Math.ceil(Math.random() * 10); //生成1-10的随机数
      console.log('随机数1:', num)
      if (num <= 10) {
        resolve(num);
      }
      else {
        reject('error');
      }
    }, 4000);
  })
  return p
}

const promiseClick2 = () => {
  let p = new Promise((resolve, reject)=> {
    setTimeout(()=> {
      var num = Math.ceil(Math.random() * 10);
      console.log('随机数2:', num)
      if (num <= 10) {
        resolve(num);
      }
      else {
        reject('error');
      }
    }, 2000);
  })
  return p
}
const promiseClick3 = () => {
  let p = new Promise((resolve, reject)=> {
    setTimeout(()=>{
      var num = Math.ceil(Math.random() * 10);
      console.log('随机数3:', num)
      if (num <= 10) {
        resolve(num);
      }
      else {
        reject('error');
      }
    }, 3000);
  })
  return p
}

Promise
  .all([promiseClick1(), promiseClick2(), promiseClick3()])
  //Promise.all接收一个数组对象
  .then((results) => {
    console.log(results); //顺序是[随机数1 随机数2 随机数3]
  }).catch((err) => {
    console.log(err)
  })

//一个可能的控制台输出
/*随机数2: 1
随机数3: 10
随机数1: 9
[ 9, 1, 10 ]*/

//将上面的Promise.all替换成Promise.race
Promise
  .race([promiseClick1(), promiseClick2(), promiseClick3()])
  .then((results) => {
    console.log('成功', results);
  }, (reason) => {
    console.log('失败', reason);
  });
//一个可能的控制台输出
/*随机数2: 10
成功 10
随机数3: 3
随机数1: 8*/

  • async await
//最简单使用
const sleep = (time) => {
  return new Promise((resolve) => {
    console.log(1)
    setTimeout(resolve, time)
  })
}

const test = async (time) => {
  await sleep(time)
  console.log(2)
}

test(2000)
  • 最基本的Promise链式调用
const sleep = (time) => {
  return new Promise((resolve) => {
    console.log(1)
    setTimeout(() => {
      resolve(time)
    }, time)
  })
}

const nosleep = (time) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve('nosleep!')
    }, time)
  })
}

sleep(2000).then((data) => {
  console.log(data)
  return sleep(3000)
}).then((data) => {
  console.log(data)
  return nosleep(4000)
}).then((data) => {
  console.log(data)
}).catch((err) => {
  console.log(err)
})

2 总结

以上是Promise基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值