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)
}
添加回答
舉報