Promise基本用法
const promise = new Promise((resolve, reject) => {
  if(/* 异步操作成功 */) {
    resolve(value)
  } else {
    reject(error)
  }
})

Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供。

Promise的状态

Promise的状态 : pending、fulfilled、rejected

Promise 在实例化的时候状态是默认 pending 的,当异步操作是完成的,状态会被修改为 fulfilled,如果异步操作遇到异常,状态会被修改为 rejected

注意

状态转化是单向的,不可逆转,已经确定的状态(fulfilled/rejected)无法转回初始状态(pending),而且只能是从 pending 到 fulfilled 或者 rejected

Promise.then

基本用法:promise.then(onFulfilled, onRejected)

promise.then可以接受两个会调函数,onFulfilled回调会接受 resolve所传递的参数,onRejected回调回接受promise 中 reject所传递的参数

Promise.catch()

基本用法:promise.catch(onRejected)

promise.catch接受onRejected回调函数作为参数,上一个promise中reject传递的参数会作为会调函数的参数

Promise.resolve()

静态方法 Promise.resolve(value) 可以认为是 new Promise() 方法的快捷方式。

new Promise(function(resolve) {
    resolve(42)
})
===
Promise.resolve(42).then(function(value) {
    console.log(value)
})
Promise.reject()

Promise.reject(error) 是和 Promise.resolve(value) 类似的静态方法,是 new Promise() 方法的快捷方式。

new Promise(function(resolve, reject) {
    reject(new Error('出错了'))
})
=== 
Promise.reject(new Error('BOOM!'))

Promise.all()

基本语法

Promise.all(promiseArray)

var p1 = Promise.resolve(1)
var p2 = Promise.resolve(2)
var p3 = Promise.resolve(3)
Promise.all([p1, p2, p3]).then(function(results) {
    console.log(results) // [1, 2, 3]
})

全部resolve:返回Promise的值

包含reject:Promise.all会立即终止执行,并返回一个reject的新的 Promise 对象。

Promise.race()

基本语法

Promise.race(promiseArray)

var p1 = Promise.resolve(1)
var p2 = Promise.resolve(2)
var p3 = Promise.resolve(3)
Promise.race([p1, p2, p3]).then(function(value) {
    console.log(value) // 1
})

数组中任意一个Promise对象变为resolve或reject的时候,函数就会返回

Last Updated: