コールバックは、JavaScriptの非同期操作を処理する最も基本的な方法です。コールバックは、別の関数への引数として渡される関数であり、非同期操作が完了した後に実行されます。非同期操作がメインスレッドをブロックしないため、この「後」部分は重要です。
APIからデータを取得する簡単な例を考えてみましょう。
<code class="javascript">function fetchData(url, callback) { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.onload = function() { if (xhr.status >= 200 && xhr.status { if (err) { console.error('Error fetching data:', err); } else { console.log('Data fetched:', data); } });</code>
この例では、 fetchData
非同期関数です。データが取得されると(またはエラーが発生します)、 callback
関数が実行されます。コールバックは、エラーオブジェクト(または成功した場合はnull
)とデータ(またはエラーが発生した場合はnull
)という2つの引数を受け取ります。このパターンは、機能的ですが、複数の非同期操作を扱う際に、深くネストされたコールバックで「コールバックHell」につながる可能性があります。
約束は、非同期操作を処理するためのより構造化されたクリーンな方法を提供します。約束は、非同期操作の最終的な結果を表します。これは、解決された値または拒否された理由(エラー)のいずれかです。
<code class="javascript">function fetchDataPromise(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.onload = function() { if (xhr.status >= 200 && xhr.status console.log('Data fetched:', data)) .catch(err => console.error('Error fetching data:', err));</code>
ここでは、 fetchDataPromise
約束を返します。 .then()
メソッドは解決された値(成功)を処理し、 .catch()
メソッドは拒否された理由(エラー)を処理します。約束は、非同期コードを読みやすく維持しやすくし、コールバックのネスティングの問題を回避します。
Async/awaitは、約束に基づいて構築され、非同期コードを書くためのより同期しているスタイルを提供します。 async
キーワードは非同期関数を宣言し、 await
キーワードは約束が解決するまで実行を一時停止します。
<code class="javascript">async function fetchDataAsync(url) { try { const response = await fetch(url); if (!response.ok) { throw new Error(`Request failed with status ${response.status}`); } const data = await response.json(); return data; } catch (err) { console.error('Error fetching data:', err); throw err; // Re-throw the error for handling further up the call stack } } fetchDataAsync('https://api.example.com/data') .then(data => console.log('Data fetched:', data)) .catch(err => console.error('Error handling:', err));</code>
fetchDataAsync
は非同期関数です。先に進む前に、 fetch
約束が解決するのを待っていawait
。 try...catch
ブロックは潜在的なエラーを処理します。 Async/awaitは、非同期コードを同期コードのように読み取り、読みやすさと保守性を大幅に向上させます。
コールバックは最も基本的なアプローチであり、ネストされた構造のために「コールバックヘル」に苦しんでいます。約束は、 .then()
と.catch()
を使用して、より構造化された方法を提供し、読みやすさを向上させます。 Async/awaitは、約束にawait
て構築され、 async
を使用してクリーンな同期のような構文を提供し、読みやすさと保守性をさらに向上させます。非同期操作がどのように処理されるかを根本的に変えることはありません。それは約束の上に構築された構文砂糖です。重要な違いは、基礎となるメカニズムではなく、コードの書き込み方法とその読みやすさにあります。
.catch()
を使用して常に潜在的なエラーを処理するか、ブロックをtry...catch
。未処理の拒絶は、静かな失敗につながる可能性があります。これらのアプローチとその落とし穴を理解することにより、効率的で読みやすく、保守可能な非同期JavaScriptコードを記述できます。
以上がコールバック、約束、およびasync/awaitを使用して、非同期JavaScriptを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。