Разница (использует 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 шт):

Автор решения: Pavel Grishaev

Во втором случае hide(item) срабатывает ещё до того, как сработает промис. Напишите вместо этого ()=> hide(item), а внутри промиса вызывайте, а не просто упоминайте функцию. Ну и && - плохой подход, лучше точка с запятой или условие.

Ещё замечу, что syncTimeout асинхронный, название вводит в заблуждение. Промис всегда асинхронный, несмотря на await. А синхронный делал бы блокировку выполнения, например долгий цикл. Плюс используется ваш метод потом в обычной функции, никакой синхронности тут нет, функция отработает до того, как выполнится таймер.

→ Ссылка