Promise(2) - Promise/A+的API

2.Promise的方法

Promise

构造函数,用来创建promise对象

语法
new Promise( function(resolve, reject) {...} /* executor函数 */  );

// 传入promise的是执行器函数,他是同步回调函数
参数

excutor

executor是带有 resolvereject 两个参数的同步回调函数函数

Promise构造函数执行时立即调用executor 函数

resolvereject 函数被调用时,分别将promise的状态改为 fulfilled(完成)或rejected(失败)


原型方法

  1. Promise.prototype.then(onFulfilled, onRejected)

    添加解决(resolve)和拒绝(reject)的回调函数到当前promise,返回新的promise|自己return一个新的promise

    new Promise((resolve, reject) => {
    	let date = +new Date()
      if(date % 2 === 0) {
        resolve('成功了')
      } else {
        reject('失败了')
      }
    }).then(
    	response => {
        console.log(response)		// response的值为 '成功了'
      },
      reason => {
        console.log(reason)		  // reason的值为 '失败了'
      }
    )
    

  2. Promise.prototype.catch(onRejected)

    添加一个拒绝(reject)回调到当前promise,返回一个新的promise,是.then第二个参数的另一种写法

    new Promise((resolve, reject) => {
      let date = +new Date()
      if(date % 2 === 0) {
        resolve('成功了')
      } else {
        reject('失败了')
      }
    }).then(
      response => {
        console.log(response)		// response的值为 '成功了'
      }
    ).catch(
      reason => {
        console.log(reason)		  // reason的值为 '失败了'
      }
    )
    

  3. Promise.prototype.finally(onFinally)

    添加一个回调函数于当前的promise对象,不管promise的状态最后为什么,该回调函数都会在promise运行完毕后调用,没有参数

    new Promise((resolve, reject) => {
    	let date = +new Date()
      if(date % 2 === 0) {
        resolve('成功了')
      } else {
        reject('失败了')
      }
    }).then(
    	response => {
        console.log(response)		// response的值为 '成功了'
      },
      reason => {
        console.log(reason)		  // reason的值为 '失败了'
      }
    ).finally(
    	function() {
        console.log('Promise运行完毕')
      }
    )
    

函数对象方法

  1. Promise.all(iterable)
    参数

    可迭代对象【数组 | 伪数组】,且数组中存放的都是Promise对象

    说明

    当数组里的所有Promise对象都成功(resolve),才能执行最外层的该promise的resolve

    一旦有任何一个iterable里面的promise对象失败(reject)则立即触发该promise对象的reject

    let p1 = new Promise((a, b) => {a(1)})
    let p2 = new Promise((a, b) => {a(2)})
    let p3 = new Promise((a, b) => {b(3)})
    
    Promise.all([p1, p2, p3]).then(
      values => {
        console.log(values)
      },
      reason => {
        console.log(reason)
      }
    )
    // reason => 3, p3是失败的,所以直接触发reject
    
    let p1 = new Promise((a, b) => {a(1)})
    let p2 = new Promise((a, b) => {a(2)})
    
    Promise.all([p1, p2]).then(
      values => {
        console.log(values)
      },
      reason => {
        console.log(reason)
      }
    )
    // values => [1, 2], p1 p2 都是成功的, 所以返回一个带有成功promise的值的数组
    
  2. Promise.race(iterable)
    参数

    可迭代对象【数组 | 伪数组】,且数组中存放的都是Promise对象

    说明

    只要数组中任意一个promise被成功或失败后,父级Promise立刻终止所有剩下任务,返回最快执行完成的那个子promise

    let p1 = new Promise((a, b) => {a(1)})
    let p2 = new Promise((a, b) => {a(2)})
    let p3 = new Promise((a, b) => {b(3)})
    
    Promise.race([p3, p1, p2]).then(
      value => {
        console.log(value)
      },
      reason => {
        console.log(reason)
      }
    )
    // 3
    
    Promise.race([p2, p1, p3]).then(
      value => {
        console.log(value)
      },
      reason => {
        console.log(reason)
      }
    )
    // 2
    
  3. Promise.reject(reason)

    返回一个状态为成功的Promise对象,将给定的信息传递给对应的onResolved方法

    Promise.resolve(value)

    返回一个状态为失败的Promise对象,将给定的信息传递给对应的onRejected方法

    Promise.resolve(20).then(value => {
      console.log(value)
    })
    // 20 
    
    Promise.reject(10).catch(reason => {
      console.log(reason)
    })
    // 10
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值