Promise.all()
Promise.all() 它接收一个promise对象组成的数组作为参数,并返回一个新的promise对象。
当数组中所有的对象都resolve时,新对象状态变为fulfilled,所有对象的resolve的value依次添加组成一个新的数组,并以新的数组作为新对象resolve的value。
当数组中有一个对象reject时,新对象状态变为rejected,并以当前对象reject的reason作为新对象reject的reason。
Promise.all = function(promiser) {
if(!Array.isArray(promiser)) {
throw new TypeError('params must array')
}
return new Promise((resolve,reject) => {
var result = [],count = promiser.length;
function resolver(value) {
resolveAll(value)
}
function rejecter(reason) {
reject(reason)
}
function resolveAll(value) {
result.push(value)
if(--count == 0) {
resolve(result)
}
}
for(var i= 0;i<promiser.length;i++) {
promiser[i].then(resolver,rejecter)
}
})
}
Promise.race()
Promise.race() 它同样接收一个promise对象组成的数组作为参数,并返回一个新的promise对象。
与Promise.all()不同,它是在数组中有一个对象(最早改变状态)resolve或reject时,就改变自身的状态,并执行响应的回调。
Promise.race = function(promiser) {
if(!Array.isArray(promiser)) {
throw new TypeError('params must be array')
}
return new Promise((resolve,reject) => {
function resolver(value) {
resolve(value)
}
function rejecter(reason) {
reject(reason)
}
})
for(var i =0;i<promiser.length;i++) {
promiser[i].then(resolver,rejecter)
}
}