校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > ES6相关(后面会废弃)
题目

手写实现一个 promise.all

解答

Promise.all的实现和原理

Promise.all 功能:
    Promise.all(iterable)返回一个新的Promise实例,此实例在iterable参数内素有的Promise都fulfilled或者参数中不包含Promise时,状态变成fulfilled。
    如果参数中Promise有一个失败rejected ,此实例回调失败,失败原因的是第一个失败Promise的返回结果

let p = Promise.all([p1,p2,p3])

复制代码p的状态由 p1,p2,p3决定,分成以下;两种情况:
(1)只有p1、p2、p3的状态都变成 fulfilled,p的状态才会变成 fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被 rejected,p的状态就变成 rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.all 的特点:
    Promise.all的返回值是一个Promise实例  

Promise.all = function (promise) {
return new Promise((resolve, reject) => {
let index = 0
let result = []
if (promise.length === 0) {
resolve(result)
} else {
function processValue(i, data) {
result[i] = data
if (++index === promise.length) {
resolve(result)
}
}
for (let i = 0; i < promise.length; i++) {
Promise.resolve(promise[i]).then((data) => {
processValue(i, data)
}, (err) => {
reject(err)
return
})
}
}
})
}


C 4条回复 评论
墨色槐

大厂陆续开放校招了要抓紧时间

发表于 2022-07-09 23:00:00
0 0
wyj

大厂面试的时候看重基础,更看重实战项目经验,业务场景使用的具体技术吧

发表于 2021-10-12 23:00:00
0 0
带脑斧

这问题真不好答

发表于 2021-09-13 16:05:00
0 0
逍洛

这道题套路也太多了,一不小心就中了陷阱

发表于 2021-09-10 09:10:00
0 0