ES6——Promise

①注:door()中只能传一个变量,如果必须传多个值,则可以将多个值放在数组或对象中整体传入

②错误处理:任何一个支持promise的函数中都有另一扇门( .catch())。如果当前异步任务执行过程中发生错误,就可以从另一扇门出来。一旦报错从这扇门出来,后续 .then() 都不会再执行,凡是从这扇门出来的代码都进入.catch()中执行错误处理操作

③Promise中有几种状态?
解:三种。
pending(挂起:异步任务正在执行中,尚未执行完毕)
resolve(同意:异步任务执行完成,且执行成功,主动调用door()函数,会将 Promise 对象的状态改为 resolve。当Promise对象的状态改为resolve后,就会自动执行.then()中的函数)
reject(拒绝:异步任务执行完成,且执行失败,主动调用err()函数,会将 Promise 对象的状态改为 reject。当Promise对象的状态改为reject后,就会自动执行.catch()中的函数))

④door(val)能用return代替吗?
解:不能!因为door()不仅有返回值的作用,还有修改Promise状态的作用

例1:

<script>
//es6——Promise 练习
      function zha() {
        return new Promise(function(door) {
          var ice = `冰淇淋`
          console.log(`炸炸拿着${ice}起跑`)
          setTimeout(() => {
            console.log(`炸炸到达终点`)
            console.log(`炸炸开门`)
            door(ice)
          }, 1000)
        })
      }
      function sasa(ice) {
        return new Promise(function(door) {
          console.log(`飒飒拿着${ice}起跑`)
          setTimeout(() => {
            console.log(`飒飒到达终点`)
            console.log(`飒飒开门`)
            door(ice)
          }, 1000)
        })
      }
      function rong(ice) {
        return new Promise(function(door) {
          console.log(`绒绒拿着${ice}起跑`)
          setTimeout(() => {
            console.log(`绒绒到达终点`)
            console.log(`比赛结束`)
          }, 1000)
        })
      }
      zha()
        .then(sasa)
        .then(rong)
</script>

例2
若每个异步函数都返回一个返回值,如何获得所有返回值?
解决:.then(function(arr){...})
其中—— arr数组中保存了Promise.all中所有异步函数通过door()返回的执行结果
强调——arr 中返回值存储顺序与异步函数执行完成的顺序无关,只与调用顺序有关

<script>
// Promise.all 练习
      function zha() {
        return new Promise(function(door) {
          var ice = `炸炸的冰淇淋`
          console.log(`炸炸拿着起跑`)
          setTimeout(() => {
            console.log(`炸炸到达终点`)
            console.log(`炸炸开门`)
            door(ice)
          }, 1000)
        })
      }
      function sasa() {
        return new Promise(function(door) {
          var ice = `飒飒的冰淇淋`
          console.log(`飒飒拿着起跑`)
          setTimeout(() => {
            console.log(`飒飒到达终点`)
            console.log(`飒飒开门`)
            door(ice)
          }, 1000)
        })
      }
      function rong() {
        return new Promise(function(door) {
          var ice = `绒绒的冰淇淋`
          console.log(`绒绒拿着起跑`)
          setTimeout(() => {
            console.log(`绒绒到达终点`)
            console.log(`绒绒开门`)
            door(ice)
          }, 1000)
        })
      }
      Promise.all([
        //数组中要求必须传入new Promise对象
        zha(),
        sasa(),
        rong()
      ])
        .then(arr => console.log(`比赛结束${arr}`))
        .catch(error => {
          console.log(error)
        })
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值