3 回答
TA贡献1820条经验 获得超2个赞
导致你出现问题的是JS异步,当你在resetGame函数中调用wordNikApi函数时,你必须使用await关键字,这样才能先生成对wordNijApi函数的更改,然后继续流程工作。尝试像这样修改 resetGame 函数:
const resetGame = async()=>{
...
await this.wordNikApi()
...
}
TA贡献1895条经验 获得超3个赞
Fetch 是一个异步函数,这意味着它将与您的其他代码一起运行,调用设置this.wordNikApi()
获取请求,但不会阻止您继续编写脚本。
在您的新版本中,函数内部有代码.then()
,当提取请求调用数据并返回时调用该函数,因此您的代码在此处等待完成,this.wordNikApi()
然后在第三个代码段中运行。
希望这有助于更清楚地了解 Async 和 Sync,但是有更好的文档可以解释这一点。
TA贡献1827条经验 获得超4个赞
我实现了一个队列,它在队列中的第一个项目上调用 fetch,然后使用 fetch().then 来拉下一个项目,发布它,然后如果队列不为空则重复执行。这是我使用的代码:
var clientDataQueue = [];
function queueClientData(theData) {
clientDataQueue.push(theData);
console.log("++clientDataQueue.length:", clientDataQueue.length)
if (clientDataQueue.length == 1){
postFromQueue();
}
}
function postFromQueue() {
console.log("--clientDataQueue.length:", clientDataQueue.length)
if (clientDataQueue.length > 0) {
postClientdata(clientDataQueue[0]).then( () => {
clientDataQueue.shift();
postFromQueue();
});
}
}
function postClientdata(theData) {
var htmlData = {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(theData)
};
return fetch('/api/clientData', htmlData)
}
添加回答
举报