Я строю игру на угадывание с Node JS. После сбора некоторых данных на бэкэнде, я отправляю их на фронтэнд, и игра начинается. Данные содержат все 10 уровней, поэтому игра может запускаться на одной странице. Каждый уровень длится 10 секунд. После истечения времени выбор пользователя отправляется на сервер, и результат возвращается. Отображается ответ, а затем содержимое изменяется на «следующий уровень» (с использованием содержимого в большом объекте данных, поэтому обновление не требуется).
У меня возникают проблемы с запуском 10 уровней по 10 секунд каждый (или ~ 12 секунд с задержкой для отображения результатов).
Этого нельзя сделать в каком-то цикле, так как все awaits
для каждого уровня будут выполняться одновременно. Например:
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
for (let i = 0; i < 10; i++) {
displayPage(i);
await timeout(10000);
const result = await $.post(...) // gets results
displayResults(result);
await timeout(2000);
}
все timeout
будут работать одновременно, и это не будет работать.
Я думал об использовании setInterval
, но я неконечно, как ... так как я хочу подождать 10 секунд до проверки ввода, а затем отобразить результаты в течение 2 секунд, а затем перейти к следующему.
На данный момент я получил следующий результат:
displayPage(level1);
await timeout(10000);
const result = await $.post(...)
displayResults(result);
await timeout(2000);
displayPage(level2);
await timeout(10000);
const result = await $.post(...)
displayResults(result);
await timeout(2000);
displayPage(level3);
await timeout(10000);
const result = await $.post(...)
displayResults(result);
await timeout(2000);
displayPage(level4);
await timeout(10000);
const result = await $.post(...)
displayResults(result);
await timeout(2000);
...
Это не кажется эффективным, и я думаю, что есть лучший способ сделать это, но я не уверен, как. Мы ценим любые предложения. Спасибо!