「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>JavaScript]] -戻る --[[JavaScript]] --[[HTML5 JavaScript API]] *目次 [#u10ef94f] #contents *概要 [#re11bc29] [[setTimeout>#r554f1d2]] や [[setInterval>#s9c2a585]]、最新の「[[Web Workers>#c1a927e4]]」を使用可能。 *並行処理 [#c7dbeba8] **疑似の並行処理 [#f1b9a890] -もともとJavaScriptはシングルスレッドの実装しかできなかった。 -このため、メッセージループを手動でタイムスライスするような疑似の並行処理を実装できる。 ***setTimeout [#v0ab9256] 指定された遅延の後に、コードの断片または関数を”一回だけ”実行する。 ***setInterval [#r4a90e44] 指定された遅延の後に、コードの断片または関数を”繰り返し”実行し続ける。 **真の並行処理 [#n6cd0063] ***[[Web Workers (JavaScript)]] [#r3f78883] 前述の[[setTimeout>#r554f1d2]]や[[setInterval>#s9c2a585]]は、疑似の「並行処理」で、~ Web Workersでスレッド機能を追加し、真の「並行処理」ができるようになる。 *非同期 [#qd9fbfb7] -呼び出し元(関数やUI)をブロックしない。 -呼び出し元と、並列して処理を行う。という意味で[[前述>#c7dbeba8]]と同じ。 -しかし、コチラは、イベントキュー・ベースのシングルスレッド処理。 **[[従来型コールバック>#c0bd2b83]] [#kc172486] **[[Promise (JavaScript)>#k3c4b06f]] [#rc7d381e] **[[async/await (JavaScript)]] [#y021ea75] *コールバック [#eb6eeb14] [[並行処理>#n6cd0063]]や[[非同期>#qd9fbfb7]]で使用されるコールバック **従来型コールバック [#c0bd2b83] 以下のように、コールバック地獄に陥り易い。 fetchSomething1(function() { fetchSomething2(function() { fetchSomething3(function() { fetchSomething4(doSomethingFinally); }); }); }); **[[Promise (JavaScript)]] [#k3c4b06f] Promiseではコールバックを関数に渡すかわりに、~ コールバックを付属させたPromiseオブジェクトをリターンすることで、~ [[従来型コールバック>#c0bd2b83]]におけるコールバック地獄を解決する。 *参考 [#lebcb0c7] **setTimeout [#l223ccbe] -window.setTimeout - Web API インターフェイス | MDN~ https://developer.mozilla.org/ja/docs/Web/API/Window/setTimeout **setInterval [#d27a251a] -window.setInterval - Web API インターフェイス | MDN~ https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval **その他 [#zcdc6403] -Promiseとasync/awaitでJavaScriptの非同期処理をシンプルに記述する~ https://sbfl.net/blog/2016/07/13/simplifying-async-code-with-promise-and-async-await/ -JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側~ https://www.infoq.com/jp/articles/js_multithread_2 -JavaScriptの非同期処理を並列処理と勘違いしていませんか? - Qiita~ https://qiita.com/klme_u6/items/ea155f82cbe44d6f5d88