用法
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p1')
resolve(1000)
}, 1000)
})
const p4 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p4')
resolve(300)
}, 300)
})
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p2')
reject(new Error(500))
}, 500)
})
const p3 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p3')
reject(new Error(100))
}, 100)
})
Promise.all([
p1,
p2,
p3
]).then((data) => {
console.log(data)
}).catch((err) => {
console.log(err)
})
polyfill
const myPromiseAll = (arr) => {
return new Promise((resolve, reject) => {
const result = []
arr.forEach((item, index) => {
item.then(data => {
result.push({[index]: data})
if (result.length === arr.length) {
console.log(result)
const data = []
result.forEach(value => {
data[Object.keys(value)[0]] = Object.values(value)[0]
})
resolve(data)
}
}).catch(err => {
reject(err)
})
})
})
}
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p1')
resolve(1000)
}, 1000)
})
const p4 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p4')
resolve(300)
}, 300)
})
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p2')
reject(new Error(500))
}, 500)
})
const p3 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('p3')
reject(new Error(100))
}, 100)
})
myPromiseAll([p1, p4]).then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})