每日一题之手写Promise.all和Promise.race
“手写源码题是近两年面试常见的题目,比如对于
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梦,收看更多精彩内容
点个[在看],是对小达最大的支持!
如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到
评论