如有错误,请指出,毕竟写之前笔者也没看过标准写法,没有使用迭代器进行循环,读者可以自行尝试。
// custom Promise.all
Promise.myAll = function (args) {
const length = args.length
let resolveNum = 0
const result = new Array(length)
return new Promise((resolve, reject) => {
try {
if (!length) resolve(result)
for (let i = 0; i < length; i++) {
;(function (i) {
args[i].then((res) => {
result[i] = res
if (++resolveNum === length) {
// console.log("promises finised")
resolve(result)
}
})
})(i)
}
} catch (error) {
reject(error)
}
})
}
// custom Promise.race
Promise.myRace = function (args) {
let resolved = false
return new Promise((resolve, reject) => {
try {
args.forEach((p) => {
p.then((res) => {
if (!resolved) {
resolved = true
resolve(res)
}
})
})
} catch (error) {
reject(error)
}
})
}
// for test
const args = [Promise.resolve(10), Promise.resolve(20), Promise.resolve(30)]
const all = Promise.all(args)
const myAll = Promise.myAll(args)
const race = Promise.race(args)
const myRace = Promise.race(args)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。