3 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊
導(dǎo)致你出現(xiàn)問(wèn)題的是JS異步,當(dāng)你在resetGame函數(shù)中調(diào)用wordNikApi函數(shù)時(shí),你必須使用await關(guān)鍵字,這樣才能先生成對(duì)wordNijApi函數(shù)的更改,然后繼續(xù)流程工作。嘗試像這樣修改 resetGame 函數(shù):
const resetGame = async()=>{
...
await this.wordNikApi()
...
}

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
Fetch 是一個(gè)異步函數(shù),這意味著它將與您的其他代碼一起運(yùn)行,調(diào)用設(shè)置this.wordNikApi()
獲取請(qǐng)求,但不會(huì)阻止您繼續(xù)編寫(xiě)腳本。
在您的新版本中,函數(shù)內(nèi)部有代碼.then()
,當(dāng)提取請(qǐng)求調(diào)用數(shù)據(jù)并返回時(shí)調(diào)用該函數(shù),因此您的代碼在此處等待完成,this.wordNikApi()
然后在第三個(gè)代碼段中運(yùn)行。
希望這有助于更清楚地了解 Async 和 Sync,但是有更好的文檔可以解釋這一點(diǎn)。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
我實(shí)現(xiàn)了一個(gè)隊(duì)列,它在隊(duì)列中的第一個(gè)項(xiàng)目上調(diào)用 fetch,然后使用 fetch().then 來(lái)拉下一個(gè)項(xiàng)目,發(fā)布它,然后如果隊(duì)列不為空則重復(fù)執(zhí)行。這是我使用的代碼:
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)
}
添加回答
舉報(bào)