If I run putToDeath(0, 1).then(()=>{ console.log('done') }
the console outputs done
before setAsyncTimeout 463
. So my function is not awaiting everything, it's returning prematurely.
How do I make it await until the very last function call, face(exeNum, 'walk', true)
, is made?
async function putToDeath(conNum, exeNum) {
let exeStartX = round(players[exeNum].x)
let exeStartY = round(players[exeNum].y)
console.log('walkTo 452')
await walkTo(conNum, window.innerWidth / 2, window.innerHeight / 2, 0.5).then(async() => {
faceAudience(conNum, 'walk')
console.log('setAsyncTimeout 455')
await setAsyncTimeout(async() => {
let exe = players[exeNum]
let direction = pointDirection(exe.x, exe.y, window.innerWidth / 2, window.innerHeight / 2)
let distance = lineLength(exe.x, exe.y, window.innerWidth / 2, window.innerHeight / 2)
let dest = getLineEndpoint(exe.x, exe.y, direction, distance - 50)
console.log('walkTo 461')
await walkTo(exeNum, dest.x, dest.y, 0.75).then(async() => {
console.log('setAsyncTimeout 463')
await setAsyncTimeout(async() => {
swingSword(exeNum)
await setAsyncTimeout(async() => {
await die(conNum).then(async() => {
await setAsyncTimeout(async() => {
face(exeNum, 'walk', false)
await setAsyncTimeout(async() => {
await walkTo(exeNum, exeStartX, exeStartY, 0.75).then(async() => {
face(exeNum, 'walk', true)
})
}, 500)
}, 500)
})
}, 750)
}, 500)
})
}, 1000)
})
}
const setAsyncTimeout = (cb, timeout = 0) => new Promise(resolve => {
setTimeout(() => {
cb()
resolve()
}, timeout)
})