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?
 
     
     
    