首頁 >web前端 >js教程 >如何優雅地暫停執行直到非同步函數完成?

如何優雅地暫停執行直到非同步函數完成?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-28 06:33:02711瀏覽

How to Gracefully Pause Execution Until an Asynchronous Function Completes?

暫停執行直到函數完成的正確方法

使用多個非同步函數時,通常需要等待一個函數完成才能執行另一個函數。讓我們研究一個解決方案並探索更優雅的方法。

原始解決方案

提供的解決方案使用帶有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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn