Как собрать слот-машину из независимых роллеров

Запустите роллеры параллельно, соберите их итоговые значения через 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее