2.Promise的方法
Promise
构造函数,用来创建promise对象
语法
new Promise( function(resolve, reject) {...} /* executor函数 */ );
// 传入promise的是执行器函数,他是同步回调函数
参数
excutor
executor是带有 resolve
和 reject
两个参数的同步回调函数函数
Promise构造函数执行时立即调用executor
函数
resolve
和 reject
函数被调用时,分别将promise的状态改为 fulfilled(完成)或rejected(失败)
原型方法
-
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的值为 '失败了' } )
-
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的值为 '失败了' } )
-
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运行完毕') } )
函数对象方法
-
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的值的数组
-
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
-
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