使用多个异步函数时,通常需要等待一个函数完成才能执行另一个函数。让我们研究一个解决方案并探索更优雅的方法。
提供的解决方案使用带有 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中文网其他相关文章!