每日一题之手写Promise.all和Promise.race

共 1579字,需浏览 4分钟

 ·

2021-03-03 00:21

手写源码题是近两年面试常见的题目,比如对于Promise来说,可能面试官就会让你手写Promise.all或者Promise.race, 你能写出来吗?

题目一

请手动实现一个Promise.all,使得下面的测试代码运行正常

Promise.myAll = function(promises) {
// 请在此处完善代码
}
// 测试代码
const promise1 = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('报错了'))
},2000)
})
const promise2 = new Promise(resolve => {
setTimeout(() => {
resolve('1')
}, 1000)
})

const promise3 = new Promise(resolve => {
setTimeout(() => {
resolve('2')
}, 999)
})

// 这个应该输出 ['1','2','3'] 顺序是固定的
Promise.myAll([promise2,promise3,'3']).then(res => {
console.log(res)
})

// 这个会进入到 catch
Promise.myAll([promise1, promise2,promise3,'3']).then(res => {
console.log(res)
}).catch(error => {
console.log('报错了')
})

题目二

请手动实现一个Promise.race,使得下面的测试代码运行正常

Promise.myRace = function(promises) {
// 请在此处完善代码
}
// 测试代码
const promise1 = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('报错了'))
},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)
})

关注数:10亿+ 文章数:10亿+
粉丝量:10亿+ 点击量:10亿+

 


微信群管理员请扫描这里

微信群管理员请扫描这里

喜欢本文的朋友,欢迎关注公众号 程序员哆啦A梦,收看更多精彩内容

点个[在看],是对小达最大的支持!


如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到

浏览 59
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报