2023/05/08(月)JavaScript 非同期処理
今まで、fetchとかthenとか、他のコードみて雰囲気で使ってたけど、つまるところ、何がどうなってるのか、ざっくりわかっておきたくなったので、今更ながらちょっと勉強した、その備忘メモ。
JavaScript 非同期処理
JavaScriptはシングルスレッドだけど非同期実行の仕組みがある。古くは setTimeout
だけど、今はPromise
とThenable
なる概念があって、 fetch()
とかがこれで実装されている。
Promise
と Thenable
MDNでは、ある非同期処理Promise
は「待機 (pending) 」「履行 (fulfilled)」「拒否(rejected)」のいずれかの状態を持つと説明される。
意味がとりにくいので、ここではそれぞれを「未完了」「完了:成功」「完了:失敗」とよびかえることにする。
「完了:成功」「完了:失敗」の状態においては、付随して値を持てる。成功時は処理結果を表す実際の値(計算結果など)、失敗時は失敗理由(例外オブジェクトなど)を持たせるのが一般的な使い方と思われる。
C++だと、Promise
は std::promise<T>
、Thenable
が std::future<T>
、
C# だと、 Promise
が Task<T>
、Thenable
が IAsyncResult<T>
に対応する感じ。