Разница (использует promise и async)
Подскажите в чем разница? Сколько не пробую, не могу понять. Проимпортированно все корректно, т.к. в остальных местах supMethods.syncTimeout() работает.
Этот код работает
function flash (item, time) {
show(item)
Promise(resolve => {
setTimeout(()=>{
hide(item) && resolve()
}, time)
})
}
А этот нет
function flash (item, time) {
show(item)
supMethods.syncTimeout(hide(item), time)
}
Вот так все вызывается
for (const element of this.needNumbers) {
await supMethods.syncTimeout( reproduce(element, this.gameMode === 0 ? 800 : 100) && await flash(element, this.gameMode - 100)
, 100)
}
Доп функции для понимания
export function syncTimeout(func = true, time) {
return new Promise(resolve => {
setTimeout(()=>{
func && resolve()
}, time)
})
}
let show = item => this.panels[item -1].classList.add('simon__panel_active')
let hide = item => this.panels[item -1].classList.remove('simon__panel_active')
Ответы (1 шт):
Во втором случае hide(item) срабатывает ещё до того, как сработает промис. Напишите вместо этого ()=> hide(item), а внутри промиса вызывайте, а не просто упоминайте функцию. Ну и && - плохой подход, лучше точка с запятой или условие.
Ещё замечу, что syncTimeout асинхронный, название вводит в заблуждение. Промис всегда асинхронный, несмотря на await. А синхронный делал бы блокировку выполнения, например долгий цикл. Плюс используется ваш метод потом в обычной функции, никакой синхронности тут нет, функция отработает до того, как выполнится таймер.