求解关于promise的一道面试题?
题目:
实现一个retry函数,使得该defer函数可以在执行5次以后,输出成功与否
const defer = num => new Promise(resolve => setTimeout(() => { console.log(`defer函数:${num}`); resolve() }, 1000));
retry(defer, 5).then(() => { console.log('success') }, () => { console.log('reject') })
我目前的实现:
function retry(func, count) {
const index = count - 1
console.log(`retry函数:${index}`)
if (count === 0) {
return Promise.resolve()
}
const next = () => retry(func.bind(null, index), index)
return func(index).then(next)
}
请问为什么在能打印如下,defer函数中的值为什么一直都是4,而不是递减到0 ?
另外,请问我的实现是否正确呢?
retry函数:4
defer函数:4
retry函数:3
defer函数:4
retry函数:2
defer函数:4
retry函数:1
defer函数:4
retry函数:0
defer函数:4
retry函数:-1
success
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
因为
bind
过后参数就绑定了,再bind
并不会改变绑定的值这样?