JavaScript 非同期プログラミングとは
非同期とは
JavaScriptの動作を深く知るには、 スレッドを知る必要があります。 手短に言えばスレッドとは、 プログラムの各タスクは順番に実行されますが、 プログラムがタスクを完了するために使用できるプロセスになります。 JavaScriptは同期、ブロッキング、シングルスレッド言語です。 パソコンに複数のコアがある場合でも、 JavaScriptは基本的にはシングルスレッドで動きます。 シングルスレッドで、タスクは順番に実行されるので、 前のタスクが終了しないと、次のタスクは開始できません。 このためタスクが結果に依存していると、 処理が終了するまで次のタスクが実行できず、 エラーが出てしまうことになります。 JavaScriptの多くのWeb API機能、 ネットワークからのファイルのフェッチ、 データベースへのアクセスなど、 外部へリソースへをアクセスしているとき、 結果がでるまで、ある程度の時間がかかり、 次のタスクが実行できない状態になります。 このような問題を修正するために、 JavaScriptは、 Promisesなどを使用し、 ブラウザーの特定の操作を非同期で実行します。 メインスレッド:タスクAーーー>タスクB Promise : 非同期操作 プログラムの タスクAからタスクBは、 Promiseを使い処理します。
Promiseオブジェクト
Promiseオブジェクトは、 非同期動作、結果の値が成功、失敗になります。 作成時のPromiseは不明な値のプロキシで、 最終値をすぐに返さず、将来の時点での値の約束を返します。 Promiseは次の状態のいずれかにあります。 pending:初期状態、実行も拒否もされていません。 fulfilled:操作が正常に完了したことを意味します。 rejected:操作が失敗したことを意味します。 Promiseは履行されて値を返すか、拒否されますが、 値が発生すると、promiseのthenメソッドによって キューに入れられた関連ハンドラーが呼び出されます。 下は基本的なPromiseの使用例です。
<body> <script> let myFirstPromise = new Promise((resolve, reject) => { setTimeout( function() { resolve("成功です!") }, 250) }); myFirstPromise.then((Message) => { console.log("オーー "+ Message) }); </script> </body>
実行すると250ms後に、 オーー 成功です! が表示されます。
Promiseを使用することで、 プログラムがエラーにならず、 処理が完了します。 以上です。