iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
0
Modern Web

30天前端面試題分享系列 第 2

Day 2 实现Promise的一些API

今天先不写Promise的核心API 我们先来实现一个race all等API

什么是Promise.all ?

Promise.all方法,接收一个数组,数组中的元素必须是一个Promise,或者是普通值。 它的返回值是一个Promise,并且可以通过then来调用 如果全部成功,这个返回的新Promise就会变成resolve状态,但凡有一个失败,那么就会变成reject态,还是比较严格的~ 代码实现: 首先就先直接返回一个新的Promise

Promise..myAll = function(promises) {
return new Promise((resolve, reject)=>{
const isPromise = p => typeof p.then === 'function' // 判断一个数据是不是Promise
let arr = []
let index = 0
const processData = (key, data)=>{
arr[key] = data
if(++index === promises.length){
resolve(arr)
}
}
for(let i=0;i<promises.length;i++) {
let result = promises[i]
if(isPromise(result)) {
result.then(data=>{
processData(i,data)
},reject)
}else {
// 如果这个result不是promise那么直接返回它。
processData(i, result)
}
}

})

}
Promise.race

和all类似,接收一个数组,将其包装成一个数组 只要有一个成功,就会resolve

Promise.myRace = function(promises) {
return new jPromise((resolve,reject)=>{
const isPromise = p => typeof p.then === 'function'
for (let i=0;i<promises.length;i++) {
let result = promises[i];
if(isPromise(result)) {
result.then(resolve,reject)
}else {
resolve(result)
}
}
})
}


上一篇
30天前端面試題第一天 Vue
下一篇
DAY3 ES6相关题目
系列文
30天前端面試題分享4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言