all方法 手写promise_试题-手写实现一个 promise.all - 拿OFFER
Promise.all的實(shí)現(xiàn)和原理
Promise.all 功能:
Promise.all(iterable)返回一個(gè)新的Promise實(shí)例,此實(shí)例在iterable參數(shù)內(nèi)素有的Promise都fulfilled或者參數(shù)中不包含Promise時(shí),狀態(tài)變成fulfilled。
如果參數(shù)中Promise有一個(gè)失敗rejected ,此實(shí)例回調(diào)失敗,失敗原因的是第一個(gè)失敗Promise的返回結(jié)果let p = Promise.all([p1,p2,p3])
復(fù)制代碼p的狀態(tài)由 p1,p2,p3決定,分成以下;兩種情況:
(1)只有p1、p2、p3的狀態(tài)都變成 fulfilled,p的狀態(tài)才會(huì)變成 fulfilled,此時(shí)p1、p2、p3的返回值組成一個(gè)數(shù)組,傳遞給p的回調(diào)函數(shù)。
(2)只要p1、p2、p3之中有一個(gè)被 rejected,p的狀態(tài)就變成 rejected,此時(shí)第一個(gè)被reject的實(shí)例的返回值,會(huì)傳遞給p的回調(diào)函數(shù)。
Promise.all 的特點(diǎn):????Promise.all的返回值是一個(gè)Promise實(shí)例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
})
}
}
})
}
總結(jié)
以上是生活随笔為你收集整理的all方法 手写promise_试题-手写实现一个 promise.all - 拿OFFER的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 报表工具实现单据套打
- 下一篇: 方案的写法