JavaScript Wordle克隆:API取词后页面刷新时机问题求助
确保API取词完成后再刷新页面的解决方案
你的核心问题是runOncePerDay里的异步API请求还没完成,同步代码就触发了页面刷新,导致新单词没来得及存入localStorage。以下是可靠的修复方案:
改造runOncePerDay为异步函数
把函数改成async,用await等待API请求结束后再执行后续操作和刷新:
async function runOncePerDay() { if (!hasOneDayPassed()) return false; // 等待API返回新单词 const newWord = await fetchWordJSON(); localStorage.setItem("wor", newWord); // 所有依赖新单词的逻辑放在这里 localStorage.setItem("Won", "false"); const wordle = newWord.toUpperCase(); console.log("WordUPSCALE ", wordle); checkLastWinDates(); localStorage.setItem("gamePlayed", "false"); // 最后执行刷新 location.reload(); }
原代码的问题点
fetchWordJSON().then(...)是异步任务,会在后续事件循环执行,但后面的location.reload()是同步执行的,完全不等API返回。then里的word;是无效代码,没有实际作用。- API请求完成前就读取
localStorage.getItem("wor"),拿到的是旧单词或者undefined。
额外建议
- 调用
runOncePerDay时记得捕获可能的API错误,比如:// 页面加载时调用 runOncePerDay().catch(err => { console.error("获取新单词失败:", err); // 可以在这里添加降级逻辑,比如使用本地备用单词 }); - 可以在API请求过程中显示加载提示,提升用户体验。
内容的提问来源于stack exchange,提问作者David T Laszlo
相关产品推荐
相关产品推荐

