I'm working on retrying some async calls in JS. When simplified and rewritten to setTimeout
the logic looks like this:
let error = true
let promise = null
const runPromise = (value) => new Promise((res) => {
if (!error) {
res()
return
}
if (promise) {
return promise.then(() => {
return runPromise(value)
})
}
promise = new Promise((res2) => {
setTimeout(() => {
promise = null
console.log(value)
error = false
res2()
}, 1000)
}).then(() => res())
})
runPromise(1).then(() => { console.log(1) })
runPromise(2).then(() => { console.log(2) })
runPromise(3).then(() => { console.log(3) })
Why then
blocks for runPromise(2)
and runPromise(3)
never got called?