ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScript はブロッキングを実装します

JavaScript はブロッキングを実装します

WBOY
WBOYオリジナル
2023-05-12 09:05:083640ブラウズ

はじめに

JavaScript は、Web 開発やフロントエンド開発で広く使用されている高水準スクリプト言語です。ほとんどの場合、JavaScript はイベント駆動型プログラミングのパターンに従う非同期言語であり、イベントがトリガーされたときに関数が実行されます。このため、JavaScript は、DOM 操作や AJAX リクエストなどの UI ユーザー操作に関連するタスクの処理に最適です。

ただし、コードの同期と逐次実行を確保するために、JavaScript の実行をブロックする必要がある場合があります。特に、特定の関数が実行される前に確実に実行されるようにする必要がある場合など、一部の複雑なシナリオでは、別の関数は、返される結果を待つ必要があります。現時点では、JavaScript ブロックを実装するためにいくつかのテクニックを使用する必要があります。

この記事では、主に次のような JavaScript ブロックを実装するいくつかの方法を紹介します。

  1. setTimeout を使用する
  2. Promise を使用する
  3. async/await を使用する
  4. ジェネレーターを使用する
#setTimeout を使用して JavaScript でブロッキングを実装する

##JavaScript でブロッキングを実装する必要がある場合、setTimeout は非常に一般的なメソッドです。 setTimeout は、一定期間後に指定されたタスクを実行するタイマーを作成できます。タイマーの時間パラメーターを 0 に設定すると、現在のタスクの完了後に JavaScript エグゼキューターにこのタイマー内の関数を実行させることができます。このようにして、JavaScript のブロックをシミュレートできます。

サンプル コードは次のとおりです。

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function demo() {
  console.log('Start');
  await sleep(5000); // sleep for 5 seconds
  console.log('End');
}

demo();

このサンプル コードでは、setTimeout メソッドを呼び出して Promise オブジェクトを返す sleep という名前の関数を定義します。デモ関数で sleep メソッドを呼び出すと、JavaScript エグゼキュータは後続のコードを実行する前に 5 秒待機します。

Promise を使用して JavaScript でブロッキングを実装する

Promise は、JavaScript における非常に重要な非同期プログラミング パターンです。 Promise を使用すると、非同期操作を同期パターンに変換できるため、コードの同期と読みやすさを維持しやすくなります。

サンプル コードは次のとおりです。

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

function demo() {
  console.log('Start');
  sleep(5000).then(() => {
    console.log('End');
  });
}

demo();

このサンプル コードでは、引き続き sleep 関数を使用してブロック操作をシミュレートしますが、今回は Promise オブジェクトを使用します。デモ関数内で sleep メソッドを呼び出すと Promise オブジェクトが返されるので、 then メソッドを呼び出すことでコールバック関数を登録し、Promise が完了したときにこのコールバック関数を実行することができます。今回は、async および await キーワードを使用する代わりに、Promise オブジェクトによってコードが同期され、読み取り可能に保たれます。

async/await を使用して JavaScript ブロッキングを実装する

ES6 では async/await キーワードが導入されており、これらのキーワードを通じて Promise オブジェクトをより簡単に処理して JavaScript ブロッキング操作を実装できます。

サンプル コードは次のとおりです。

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function demo() {
  console.log('Start');
  await sleep(5000);
  console.log('End');
}

demo();

このサンプル コードでは、async キーワードと await キーワードを使用し、sleep 関数を async 関数本体内に配置します。デモ関数内で sleep メソッドを呼び出すと、Promise オブジェクトの完了を自動的に待ちます。このアプローチにより、コード内のブロッキングと非ブロッキングの違いを明確にし、コードを簡潔で読みやすいものに保つことができます。

ジェネレーターを使用して JavaScript ブロックを実装する

ジェネレーターは、中断および再開できる特別な JavaScript 関数です。ジェネレーターは非同期タスクを反復処理し、他の制御フローと混合して JavaScript でブロック操作を実装できます。

サンプル コードは次のとおりです。

function* demo() {
  console.log('Start');
  yield sleep(5000);
  console.log('End');
}

function sleep(ms) {
  setTimeout(() => {
    it.next();
  }, ms);
}

const it = demo();
it.next();

このサンプル コードでは、Generator 関数を使用し、その中に sleep 関数を配置します。デモ関数内で yield キーワードを呼び出すと、現在の実行状態が一時停止され、sleep 関数の実行が完了するまで待機します。スリープ関数が完了すると、JavaScript エグゼキュータはデモ関数に戻り、後続のコードの実行を続けます。

結論

JavaScript は非常に強力で柔軟なプログラミング言語であり、その非同期特性により非常に優れたスクリプト言語としても機能します。ただし、場合によっては、より逐次的で同期的な操作を実現するために、非同期機能の一部を犠牲にする必要があります。この記事で紹介したいくつかの方法により、JavaScript の実行プロセスをより適切に制御し、より堅牢で効率的なコードを作成できます。

以上がJavaScript はブロッキングを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。