ES6中Promise的简单理解

whynotgonow 2020-06-03

一个函数参数:new Promise(function(resolve, reject))

每个Promise构造函数可接受一个参数,该参数为一个函数,该函数又有两个参数resolve和reject,分别表示为成功之后的回调函数和失败之后的回调函数。

当异步操作执行成功后,会将异步操作结果作为参数传入 resolve 函数并执行,此时 Promise对象状态从 pending 变为 fulfilled ;
失败则会将异步操作的错误作为参数传入 reject 函数并执行,此时 Promise对象状态从pending 变为 rejected

两个状态转换:pending->fulfilled, pending->rejected

从两种状态转换可以看出一个有三种状态,挂起态pending,已成功fulfilled,已失败rejected。状态一旦改变就不会再变。

三个原型方法:.then(), .catch(), .finally()

  • .then()方法可提供一个或两个回调函数作为参数。第一个回调函数是Promise对象的状态由pending 变为 resolved 时执行;第二个回调函数则是Promise对象的状态由pending变为rejected 时执行,且第二个参数可选。
Promise.then(function(value){
  // success
},function(error){
  // failure
})
  • .catch()方法提供一个回调函数作为参数,在失败时执行的回调函数。该回调函数的作用等同于.then()方法的第二个参数。以下写法等价。
Promise.then(undefined, function(error){
  //failure
})
// 等价于
Promise.catch(function(error){
  //failure
})
  • .finally()方法,无论结局如何都会执行的回调函数。

四个普通方法:.all(iterable), .race(iterable), .resolve(value), .reject(value)

  • .all()方法,iterable参数必须是一个可迭代对象。等所有传入的参数状态由pending->fulfilled时,执行状态为resolve的回调函数,即.then() 方法的第一个函数参数。若iterable中有一个状态变为rejected,则立马执行reject的回调函数。
  • .race()方法,iterable参数必须为可迭代对象。第一个状态由pending->rejected或pending->fulfilled触发,触发对应的resolve或reject函数,剩下的可迭代项继续执行,但执行结束后不再执行对应状态的回调函数。
  • .resolve()方法,用于返回一个状态为 fulfilled 的Promise对象
  • .rejecct()方法,用于返回一个状态为 rejected 的Promise对象

相关推荐

82550495 / 0评论 2020-03-01