每日一題之手寫Promise.all和Promise.race
“手寫源碼題是近兩年面試常見的題目,比如對于
Promise來說,可能面試官就會讓你手寫Promise.all或者Promise.race, 你能寫出來嗎?
題目一
請手動實(shí)現(xiàn)一個Promise.all,使得下面的測試代碼運(yùn)行正常
Promise.myAll = function(promises) {
// 請?jiān)诖颂幫晟拼a
}
// 測試代碼
const promise1 = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('報(bào)錯了'))
},2000)
})
const promise2 = new Promise(resolve => {
setTimeout(() => {
resolve('1')
}, 1000)
})
const promise3 = new Promise(resolve => {
setTimeout(() => {
resolve('2')
}, 999)
})
// 這個應(yīng)該輸出 ['1','2','3'] 順序是固定的
Promise.myAll([promise2,promise3,'3']).then(res => {
console.log(res)
})
// 這個會進(jìn)入到 catch
Promise.myAll([promise1, promise2,promise3,'3']).then(res => {
console.log(res)
}).catch(error => {
console.log('報(bào)錯了')
})
題目二
請手動實(shí)現(xiàn)一個Promise.race,使得下面的測試代碼運(yùn)行正常
Promise.myRace = function(promises) {
// 請?jiān)诖颂幫晟拼a
}
// 測試代碼
const promise1 = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('報(bào)錯了'))
},2000)
})
const promise2 = new Promise(resolve => {
setTimeout(() => {
resolve('1')
}, 1000)
})
const promise3 = new Promise(resolve => {
setTimeout(() => {
resolve('2')
}, 999)
})
Promise.myRace([promise1, promise2, promise3]).then(res => {
// 輸出2
console.log(res)
})
Promise.myRace([promise1,'3', promise2, promise3]).then(res => {
// 輸出3
console.log(res)
})
關(guān)注數(shù):10億+ 文章數(shù):10億+
粉絲量:10億+ 點(diǎn)擊量:10億+
微信群管理員請掃描這里
微信群管理員請掃描這里
喜歡本文的朋友,歡迎關(guān)注公眾號 程序員哆啦A夢,收看更多精彩內(nèi)容
點(diǎn)個[在看],是對小達(dá)最大的支持!
如果覺得這篇文章還不錯,來個【分享、點(diǎn)贊、在看】三連吧,讓更多的人也看到
評論
圖片
表情

