Это:
.finally(allow = true)
никогда не будет работать, потому что вам нужно передать функцию в .finally()
как в:
.finally(() => {allow = true})
Когда вы не передаете функцию, код выполняется сразу, а не позже, когда обещание выполнено. Когда вы передаете функцию, вы даете инфраструктуре обещания шанс вызвать функцию, когда она будет готова к вызову функции (некоторое время спустя).