3 回答
TA貢獻(xiàn)1820條經(jīng)驗 獲得超3個贊
導(dǎo)致你出現(xiàn)問題的是JS異步,當(dāng)你在resetGame函數(shù)中調(diào)用wordNikApi函數(shù)時,你必須使用await關(guān)鍵字,這樣才能先生成對wordNijApi函數(shù)的更改,然后繼續(xù)流程工作。嘗試像這樣修改 resetGame 函數(shù):
const resetGame = async()=>{
...
await this.wordNikApi()
...
}
TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊
Fetch 是一個異步函數(shù),這意味著它將與您的其他代碼一起運(yùn)行,調(diào)用設(shè)置this.wordNikApi()獲取請求,但不會阻止您繼續(xù)編寫腳本。
在您的新版本中,函數(shù)內(nèi)部有代碼.then(),當(dāng)提取請求調(diào)用數(shù)據(jù)并返回時調(diào)用該函數(shù),因此您的代碼在此處等待完成,this.wordNikApi()然后在第三個代碼段中運(yùn)行。
希望這有助于更清楚地了解 Async 和 Sync,但是有更好的文檔可以解釋這一點。
TA貢獻(xiàn)1827條經(jīng)驗 獲得超4個贊
我實現(xiàn)了一個隊列,它在隊列中的第一個項目上調(diào)用 fetch,然后使用 fetch().then 來拉下一個項目,發(fā)布它,然后如果隊列不為空則重復(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)
}
添加回答
舉報
