首页 >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:

在现代 JavaScript 中,async/await 提供了更具可读性和暂停执行的有效方法:

<code class="javascript">const secondFunction = async () => {
  const result = await firstFunction()
  // Do something else here after firstFunction completes
}</code>

结论

虽然轮询可用于等待函数完成,但回调函数、箭头函数和 async/await 提供了更优雅和高性能的解决方案。选择最适合您的特定要求和 JavaScript 环境的方法。

以上是如何优雅地暂停执行直到异步函数完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn