JavaScript はブロッキングを実装します
はじめに
JavaScript は、Web 開発やフロントエンド開発で広く使用されている高水準スクリプト言語です。ほとんどの場合、JavaScript はイベント駆動型プログラミングのパターンに従う非同期言語であり、イベントがトリガーされたときに関数が実行されます。このため、JavaScript は、DOM 操作や AJAX リクエストなどの UI ユーザー操作に関連するタスクの処理に最適です。
ただし、コードの同期と逐次実行を確保するために、JavaScript の実行をブロックする必要がある場合があります。特に、特定の関数が実行される前に確実に実行されるようにする必要がある場合など、一部の複雑なシナリオでは、別の関数は、返される結果を待つ必要があります。現時点では、JavaScript ブロックを実装するためにいくつかのテクニックを使用する必要があります。
この記事では、主に次のような JavaScript ブロックを実装するいくつかの方法を紹介します。
- setTimeout を使用する
- Promise を使用する
- async/await を使用する
- ジェネレーターを使用する
##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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この記事では、functionコンポーネントでのデータフェッチやDOM操作などの副作用を管理するためのフックであるReactの使用Effectについて説明します。メモリリークなどの問題を防ぐための使用、一般的な副作用、およびクリーンアップについて説明します。

怠zyな読み込みは、必要になるまでコンテンツの読み込みを遅延させ、初期負荷時間とサーバーの負荷を削減することにより、Webパフォーマンスとユーザーエクスペリエンスを改善します。

この記事では、Virtual DOMツリーを比較してDOMを効率的に更新するReactの調整アルゴリズムについて説明します。パフォーマンスの利点、最適化技術、ユーザーエクスペリエンスへの影響について説明します。

この記事では、JavaScriptのカレーについて説明します。これは、マルチアーグメント関数を単一argument関数シーケンスに変換する手法です。 Curryingの実装、部分的なアプリケーションなどの利点、実用的な用途、コード読み取りの強化を調査します

JavaScriptの高次関数は、抽象化、共通パターン、および最適化技術を通じて、コードの簡潔さ、再利用性、モジュール性、およびパフォーマンスを強化します。

この記事では、ReactのUseContextを説明しています。これにより、小道具掘削を避けることで国家管理を簡素化します。再レンダーの削減により、集中状態やパフォーマンスの改善などの利点について説明します。

記事では、Connect()、MapStateToprops、MapDispatchToprops、およびパフォーマンスへの影響を説明するReduxストアに反応コンポーネントをReduxストアに接続します。

記事では、PreventDefault()メソッドを使用して、イベントハンドラーのデフォルト動作の防止、ユーザーエクスペリエンスの強化などの利点、およびアクセシビリティの懸念などの潜在的な問題について説明します。
