使用多個非同步函數時,通常需要等待一個函數完成才能執行另一個函數。讓我們研究一個解決方案並探索更優雅的方法。
提供的解決方案使用帶有setTimeout 的輪詢機制來不斷檢查第一個函數是否已完成:
<code class="javascript">var isPaused = false; function firstFunction() { isPaused = true; // Do something isPaused = false; } function secondFunction() { firstFunction(); function waitForIt() { if (isPaused) { setTimeout(waitForIt, 100); } else { // Do something else } } }</code>
雖然這種方法可行,但由於依賴輪詢,它並不是最佳選擇。
回呼函數:
常見做法就是使用回呼函數來處理非同步完成:
<code class="javascript">function firstFunction(callback) { // Do asynchronous work callback(); } function secondFunction() { firstFunction(() => { console.log("huzzah, I'm done!"); }); }</code>
當firstFunction完成時,它會呼叫回呼函數,讓secondFunction繼續執行。
箭頭函數:
<code class="javascript">firstFunction(() => console.log('huzzah, I'm done!'))</code>使用箭頭函數簡化了這個方法:
Async/Await:
<code class="javascript">const secondFunction = async () => { const result = await firstFunction() // Do something else here after firstFunction completes }</code>Async/Await:
在現代JavaScript 中,async/await 提供了更具可讀性和暫停執行的有效方法:
結論雖然輪詢可用於等待函數完成,但回調函數、箭頭函數和async/await 提供了更優雅和高效能的解決方案。選擇最適合您的特定要求和 JavaScript 環境的方法。以上是如何優雅地暫停執行直到非同步函數完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!