Запустите роллеры параллельно, соберите их итоговые значения через Promise.all и вычислите выигрыш из полученного массива, а не из старого state.
Как собрать слот-машину из независимых роллеров
Запустите роллеры параллельно, соберите их итоговые значения через Promise.all и вычислите выигрыш из полученного массива, а не из старого state.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Учебный контракт: runSpinner(index, onRoll) возвращает Promise итоговой цифры 0–9 и во время работы вызывает onRoll(value). Нужно запустить n роллеров, заблокировать повторный запуск и определить совпадение после остановки всех.
Ответ
Запустите роллеры параллельно, соберите их итоговые значения через Promise.all и вычислите выигрыш из полученного массива, а не из старого state.
Перед запуском установите running, сохраните ID запуска и сбросьте прежний результат. onRoll обновляет только свою ячейку функциональным обновлением. После Promise.all проверьте ID и условие values.length > 0 && values.every(v => v === values[0]). Обработайте ошибку и снимайте блокировку в finally только для актуального запуска. При размонтировании отмените операции, если контракт позволяет, либо игнорируйте поздние callbacks.