最近在准备面试,所以在看一些面试题来梳理自己的知识结构。在实现这个Promise相关方法的时候发现网上大家实现的方法有很多种,由于也没有个标准,所以想把自己实现的代码也贴出来,希望能海纳百川,多多学习。
function formatPromise(iterable) {
for (let i = 0; i < iterable.length; i++) {
if (!(iterable[i] instanceof Promise)) {
iterable[i] = Promise.resolve(iterable[i])
}
}
}
function all(iterable) {
const result = []
if (iterable.length === 0) {
return Promise.resolve()
}
formatPromise(iterable)
return new Promise((resolve, reject) => {
for (let i = 0; i < iterable.length; i++) {
iterable[i]
.then((res) => {
result.push(res)
if (i === iterable.length - 1) {
resolve(result)
}
})
.catch((err) => {
reject(err)
})
}
})
}
const promise1 = Promise.resolve(3)
const promise2 = 42
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "foo")
})
const promise4 = new Promise((resolve, reject) => {
setTimeout(reject, 1000, "输出拒绝理由")
})
all([promise1, promise2, promise3, promise4])
.then((res) => {
console.log(res)
})
.catch((err) => {
console.log(err)
})
// 输出拒绝理由