javascript - 使页面循环显示 10 秒
问题描述
我正在用 Node JS 构建一个猜谜游戏。在后端收集一些数据后,我将其发送到前端,然后游戏开始。数据包含所有 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
s 将立即运行,它不会工作。
我想过使用 a 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);
...
这似乎效率不高,我认为有更好的方法可以做到这一点,但我不确定如何。任何建议,将不胜感激。谢谢!
解决方案
假设它包含在异步函数中,您的第一个选项似乎可以工作:
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const testFunc = async () =>{
for (let i = 0; i < 10; i++) {
console.log('page' , i+1 , '- question')
await timeout(3000);
console.log('page' , i+1 , '- answer')
await timeout(1000);
}
}
testFunc()
推荐阅读
- angular - 两种不同类型的数据
- algorithm - 如何解决 BST 问题?
- azure - 是否可以从 Microsoft.Azure.EventHubs 库迁移到 Azure.Messaging.EventHubs 而不会丢失检查点?
- java - 如何将 HashMap 数据保存在我电脑的任何位置?
- ms-access - 在 MS Access 的 Format 函数中使用变量时,数字的格式不正确
- javascript - 当测试和测试对象在不同文件中时,从其他文件模拟导入的函数
- azure-language-understanding - 如何使用 LUIS 短语列表来增强模式识别?
- javascript - 创建 React 组件数组?
- html - 如何使用 CSS 替换 PNG 图像的颜色?
- spring - 何时为 Spring Boot 执行指定多个配置文件