题目:
实现一个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
因为
bind
过后参数就绑定了,再bind
并不会改变绑定的值