非同期関数が完了するまで実行を適切に一時停止するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-28 06:33:02
オリジナル
623 人が閲覧しました

How to Gracefully Pause Execution Until an Asynchronous Function Completes?

関数が完了するまで実行を一時停止する適切な方法

複数の非同期関数を使用する場合、多くの場合、1 つの関数が完了するまで待ってから別の関数を実行する必要があります。ソリューションを調べて、より洗練されたアプローチを検討してみましょう。

元のソリューション

提供されたソリューションは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!