[[JavaScript]]初心者にとって最大の難関とも言える非同期処理に入っていきます。本クエストでは『非同期処理はなぜ誕生したのか?』を学習します。[[#Reference]]を参考にしてMissionを解きながら理解を深めていきましょう。 ## Reference - [非同期処理:Promise/Async Function · JavaScript Primer \#jsprimer](https://jsprimer.net/basic/async/) ## Mission 1 #🙂NORMAL [[JavaScript]]で非同期がほぼ必須と言われている理由を、100文字程度で説明してください。 %% 解答例 ```js JavaScriptで非同期処理が必須とされる主な理由は、シングルスレッドで動作するJavaScriptがUIのブロッキングを防ぐ必要があるためです。時間のかかる処理(通信やファイル操作など)を同期的に実行すると、その間ユーザー操作を受け付けられなくなってしまいます。 ``` %% ## Mission 2 #🙂NORMAL 次の説明の中で正しいものを1つ選び、他の選択肢がなぜ間違っているかも説明してください。 A. ブラウザで[[REST API]]を使ったデータ取得処理を書く場合、fetchは非同期処理にしたほうがよい B. [[REST API]]の実装でDBからデータを取得する処理を各場合は、UIがないので同期処理で問題ない C. 非同期処理は常に[[並列]]処理(Parallel)として実行される D. [[ウェブワーカー]]で起動したスレッドと[[メインスレッド (JavaScript)|メインスレッド]]間のデータ共有は、特に意識しなくても[[メインスレッド (JavaScript)|メインスレッド]]のみで実行されるコードのように書ける %% 解答例 正しいのは `A`。 B. UIがなくてもブロッキング処理を実行するとスレッドの処理がブロックされて他の処理を実行できなくなるから C. 非同期処理は基本的に[[並行]]処理(Concurrent) D. `postMessage` のようなメソッドを使ったやりとりが必要という制限が発生する %% ## Mission 3 #🙂NORMAL 関数 [[Deno.readTextFileSync]] を使った以下のコードについて ```js const data = Deno.readTextFileSync("hello.txt"); console.log(data); ``` 同期・非同期処理という観点で実生活に例えたとき、**最も不適切なもの** を選び、その理由を説明してください。 A. 電子レンジの前でお弁当が温まり終わるのをずっと待っている B. 洗濯物が洗い終わるまで洗濯機の前でずっと待っている C. [[Slack]]で返信がくるまで他のchannelの様子を見ている D. 問い合わせでコールセンターに繋がるまで何度も電話をしている --- *NEXT* >> [[📗TDQ-023 古の非同期処理 コールバック関数]]