1: API
Promise.all([x,x,x])
Promise.race([x,x,x])
Promise.resolve()
Promise.reject()
const p1 = new Promise((resolve, reject) => {
return resolve(1)
})
const p2 = Promise.resolve(2)
const p3 = Promise.reject(3)
Promise.all([x,x,x])
这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。Promise.all方法常被用于处理多个promise对象的状态集合。(可以参考jQuery.when方法---译者注)
把上面p1,p2,p3使用
Promise.all([p1,p2,p3])
//由于p3返回的是失败 reject 所以会返回第一个失败的promise 对象的错误信息作为all的失败错误信息
/*Promise {<rejected>: 3}
__proto__: Promise
[[PromiseStatus]]: "rejected"
[[PromiseValue]]: 3*/
Promise.all([p1,p2])
// 由于返回值全部正确所以返回的是数组 [1,2]
/*
[[PromiseValue]]: Array(2)
0: 1
1: 2
length: 2
__proto__: Array(0)
*/
Promise.race([x,x,x])
当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。
Promise.race(p1,p2) // [1]
// p1, p2 谁先返回则输出的是谁的值,不管是成功还是失败
网友评论