Promise

Promise翻译为承诺,它表示一个预计会在未来完成的异步操作。

promise有三个状态[PromiseState]:pending(进行中)   fulfilled(已成功)   rejected(已失败)

promise的状态一旦发生改变会一直保持这个状态就不会再发生变化,这时候就会触发promise的then方法,then方法中有两个回调函数,一个是成功后的回调resolve,一个是失败后的回调reject
 

promise接受一个回调函数作为参数,回调函数有两个参数resolve代表成功后的回调,rejiect代表失败后的回调。


  let p = new Promise((resolve, reject) => {
    if (true) {
      resolve(123) // 在promise完成后 成功 后调用 并把123返回出去
    } else {
      reject(456) // 在promise完成后 失败 后调用 并把456返回出去
    }
  })

 Promise上的方法

 

  • then方法
    
    /**
       * then方法
       * then方法中有两个回到函数  1.成功后的回到  2. 失败后悔的回调
       * 当promise执行结束就会触发then方法
       * 如果promise的状态是resolve的时候会触发then方法中的第一个函数
       * 如果promise的状态是reject的时候会触发then方法中的第二个函数
       */
      p.then(res => {
        console.log(res); //promise的状态是成功状态fulfilled 所有返回 123
      }, err => {
        console.log(err) // promise的状态是失败状态rejected 就会返回 456
    
    

  •  catch方法
    
    /**
       * catch 方法
       * 错误捕获
       * 当promise报错的时候 catch方法会捕获到错误 他也会捕获到then方法中的错误
       */
      p.catch(err => {
        console.log(err)
      })

  • finally方法
    
    /**
       * finally 方法
       * 不管promise执行成功还是失败  finally都会执行
       */
      p.finally(() => {
        console.log(1);
      })

     promise的API

  • all 

  • 接收的参数是一个数组,数组的每个参数都是一个promise对象,当全部的promise对象都返回结果时,all就会执行,返回所有promise的结果,如果其中有一个失败,就返回失败。
  •   let box = document.getElementById('box')
        let src1 = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=153960715,2502274764&fm=26&gp=0.jpg"
        let src2 = "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1474266791,210202337&fm=26&gp=0.jpg"
        let src3 = "https://img2.baidu.com/it/u=142535408,4047253383&fm=26&fmt=auto&gp=0.jpg"
        function getImg(src) {
            let img = document.createElement('img')
            img.src = src
            return new Promise((resolve, reject) => {
                img.onload = function () {
                    resolve(img)
                }
                img.onerror = function () {
                    reject('警告警告')
    
                }
    
            }
            )
        }
       let pAll =Promise.all([getImg(src1), getImg(src2), getImg(src3)])
        pAll.then(res => {//当全部加载成功时才会渲染所有图片
            console.log(res);
            res.forEach(item=>{
                box.append(item)
            })
        })

  • race

  • 接收的参数也是一个数组,数组的每个参数都是一个promise对象,和all不同的是,race是哪个promise先得到结果就返回谁,不管是成功还是失败。
  •   let box = document.getElementById('box')
        let src1 = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=153960715,2502274764&fm=26&gp=0.jpg"
        let src2 = "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1474266791,210202337&fm=26&gp=0.jpg"
        let src3 = "https://img2.baidu.com/it/u=142535408,4047253383&fm=26&fmt=auto&gp=0.jpg"
        function getImg(src) {
            let img = document.createElement('img')
            img.src = src
            return new Promise((resolve, reject) => {
                img.onload = function () {
                    resolve(img)
                }
                img.onerror = function () {
                    reject('警告警告')
    
                }
    
            }
            )
        }
    
        let timeImg = new Promise((resolve, reject) => {
    
            setTimeout(() => {
                resolve('图片加载失败')
            }, 1000);
        })
     
    
        let pRaces = Promise.race([getImg(src1), timeImg])
        pRaces.then(res => {//超过一秒图片还没加载完成就渲染图片加载失败
            console.log(res);
            box.append(res)
        })

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值