Правильно ли так работать с setTimeout?
Может быть так:
snippet
Простая очередь на промисах:

snippet

Кроме того, есть готовые библиотеки для организации очередей/стеков

Но вероятно вам не нужен сам таймаут, а нужно просто дождаться выполнения какой-то задачи.
Поэтому его уберем, и используем просто как имитацию задержки
https://jsfiddle.net/DelphinPRO/pfL9znoh/2/