非同期は難しいです。非同期は難しいです。非同期は難しいです。

プログラムではなく日常のタスクをサンプルに考えてみます。

朝起きてから家を出るまでのタスク例として書き出します。
左の()内がタスクのid. 右の()は、依存するタスクidとそれぞれの実行にかかる時間です。
コーヒーに着目すると、(1)でお湯を沸かし、(5)でドリップし、(10)でのみ終え、(11)で食器を洗います。(8)の朝食も(5)に依存しています。
この順番は入れ替えることもできませんし、前のタスクの終了を待たないと次のタスクは実行できません。お湯が湧いたら適切な温度ですぐにドリップしたいですし、のんびりしていると遅刻してしまうので、前のタスクが終わり次第、できる限りすぐに次にタスクを実行したいです。

このように日常はタスクが複雑に依存し、それぞれが非同期に動いています。

#### 起きたらすぐ実行するタスク

- (1) コーヒーのお湯をわかす (４分)
- (2) 子供を起こす
  - 3分おきの5回呼ぶと起きる。ただし、3分以内の呼んだり、5分以上間隔が開くと、最初からやり直し
- (3) 朝食をつくる (15分)
- (4) いつも遅れる新聞をとりにいく
  - 5分以上間隔をあけて４回見に行くと、新聞はきている。ただし5分未満で見に行くと 最初からやりなおし

#### 依存タスク

- (5) お湯が湧いたらコーヒーをいれる(1)	(5分)
- (6) 子供が起きたら着替える(2)	(6分)
- (7) 子供が着替えおわったら洗濯機をまわす(6) (13分)
- (8) 朝食ができる && コーヒーができる&& こども着替えおわるの条件を満たすと朝食を食べる(3)(5)(6) (９分)
- (9) 洗濯機終了後、洗濯を干す(7) (5分)
- (10) コーヒーができていて、洗濯が終わっていたらコーヒーを飲み終える(5)(9) (５分)
- (11) 朝食終了 && コーヒーを飲み終えると食器を洗う(10)(8) (４分)
- (12) 朝食終了後、子供が用意する(8) (３分)
- (13) 新聞到着していたら新聞が読む(4) (8分)
- (14) 13までのタスクが全て終わっていたら家出発(1~13)

## Promise.allを使う

これらのタスクをプログラム化し、非同期で実行しようと考えます。
