WEBVTT

1
00:00:00.000 --> 00:00:01.041
こんにちは。

2
00:00:01.041 --> 00:00:06.421
今回はジャバスクリプトのプロミス・オールセトルドを紹介します。

3
00:00:06.421 --> 00:00:11.626
これは、複数の非同期処理を同時に走らせて、成功したものも失敗したものも、

4
00:00:11.626 --> 00:00:16.832
すべての結果をまとめて受け取るための仕組みです。

5
00:00:16.832 --> 00:00:24.120
これまで学んだプロミス・オールでは、一件でも失敗すると全体がすぐに失敗になりました。

6
00:00:24.120 --> 00:00:26.376
オールセトルドは違います。

7
00:00:26.376 --> 00:00:31.756
途中で失敗があっても最後まで待ち、全件の成否を一覧で返します。

8
00:00:31.756 --> 00:00:37.308
この動画では、書き方と引数、オールとの違い、記事の基本例と結果の読み方、

9
00:00:37.308 --> 00:00:42.861
空の入力といった境界条件、成功と失敗を分ける応用、そして値へ触れる前の確認といった注意点まで、

10
00:00:42.861 --> 00:00:48.414
実行結果と一緒に学びます。

11
00:00:48.414 --> 00:00:53.620
一括処理の結果を漏れなく確認したい場面で役立つメソッドです。

12
00:00:53.620 --> 00:00:55.556
まず動作環境を確認します。

13
00:00:55.556 --> 00:01:00.843
プロミス・オールセトルドは、クロームでは七十六以降、エッジでは七十九以降、

14
00:01:00.843 --> 00:01:06.130
ファイアーフォックスでは七十一以降、サファリでは十三以降で使えます。

15
00:01:06.130 --> 00:01:10.449
ノード・ジェイエスでは十二・九・ゼロ以降で対応しています。

16
00:01:10.449 --> 00:01:14.768
記事の互換性情報はエムディーエヌのデータに基づく目安です。

17
00:01:14.768 --> 00:01:19.088
前回学んだレースと比べると新しい機能ですが、現在の主要ブラウザーとノードであれば、

18
00:01:19.088 --> 00:01:23.407
ほとんどの環境でそのまま使えます。

19
00:01:23.407 --> 00:01:29.513
スライドの通り、オールセトルドは関数として備わっていることを実機でも確認済みです。

20
00:01:29.513 --> 00:01:35.768
追加のパッケージは不要で、ブラウザーのコンソールでもノードでも同じコードで試せます。

21
00:01:35.768 --> 00:01:37.257
書き方を確認します。

22
00:01:37.257 --> 00:01:42.022
プロミスのあとにドットを書き、オールセトルドとカッコを続けます。

23
00:01:42.022 --> 00:01:48.424
引数は一つだけで、プロミスや通常の値を含む、反復可能なオブジェクト、代表例は配列です。

24
00:01:48.424 --> 00:01:53.933
戻り値は新しいプロミスで、渡したすべての処理が決着したあとに履行されます。

25
00:01:53.933 --> 00:01:58.549
その中身は、入力と同じ順番に並んだ結果オブジェクトの配列です。

26
00:01:58.549 --> 00:02:02.718
各結果には、成功か失敗かを示すステータスが必ず入ります。

27
00:02:02.718 --> 00:02:09.270
スライドの例では、成功した一件のステータスがフルフィルドになることを実機で確認しました。

28
00:02:09.270 --> 00:02:14.332
引数を一つずつ並べるのではなく、配列にまとめて渡す点がポイントです。

29
00:02:14.332 --> 00:02:18.948
決着という言葉は、成功でも失敗でも処理が終わることを表します。

30
00:02:18.948 --> 00:02:22.077
次回学ぶプロミス・オールとの違いを整理します。

31
00:02:22.077 --> 00:02:25.546
オールは、すべての処理が成功したときだけ結果を返し、一件でも失敗すると、

32
00:02:25.546 --> 00:02:29.015
その時点で全体が拒否されます。

33
00:02:29.015 --> 00:02:31.328
成功した他の結果は受け取れません。

34
00:02:31.328 --> 00:02:35.001
一方オールセトルドは、失敗があっても拒否されず、すべての処理が終わるまで待って、

35
00:02:35.001 --> 00:02:38.674
全件の結果を配列で返します。

36
00:02:38.674 --> 00:02:44.252
スライドの通り、成功と失敗を並べても、二件分の結果が返ることを実機で確認しました。

37
00:02:44.252 --> 00:02:50.374
選び方の目安は、全部成功が前提ならオール、一件ごとの成否を知りたいならオールセトルドです。

38
00:02:50.374 --> 00:02:53.775
この違いが、記事でも中心になっているポイントです。

39
00:02:53.775 --> 00:02:57.856
名前が似ているため、失敗時の動きに注目して区別してください。

40
00:02:57.856 --> 00:02:59.719
記事の基本例を見ます。

41
00:02:59.719 --> 00:03:05.478
非同期関数の中で、成功するオーケーという値と、エヌジーというエラーで失敗するプロミスを配列に並べ、

42
00:03:05.478 --> 00:03:11.237
オールセトルドに渡して結果を待ちます。

43
00:03:11.237 --> 00:03:16.150
そのあと、各結果からステータスだけを取り出して表示します。

44
00:03:16.150 --> 00:03:23.264
実行結果はフルフィルドとリジェクテッドの並びで、ノードの実機結果とも一致しています。

45
00:03:23.264 --> 00:03:29.531
配列の順番は入力と同じで、一件目が成功、二件目が失敗だと一目で分かります。

46
00:03:29.531 --> 00:03:36.476
失敗が混ざっても例外にならず、結果として受け取れることが、このメソッドの特徴です。

47
00:03:36.476 --> 00:03:45.284
まずはこの例をコンソールで実行し、成功と失敗の並びを入れ替えたら結果がどう変わるか予測してみてください。

48
00:03:45.284 --> 00:03:48.384
結果オブジェクトの中身の読み方を確認します。

49
00:03:48.384 --> 00:03:51.906
成功した結果にはバリューという項目に値が入ります。

50
00:03:51.906 --> 00:03:56.978
失敗した結果にはリーズンという項目に、失敗の理由であるエラーが入ります。

51
00:03:56.978 --> 00:04:05.150
スライドの例では、一件目のバリューがオーケー、二件目のリーズンのメッセージがエヌジーになることを実機で確認しました。

52
00:04:05.150 --> 00:04:11.491
大切なのは、バリューへ触れる前に、ステータスがフルフィルドかどうかを必ず確認することです。

53
00:04:11.491 --> 00:04:16.704
失敗した結果にバリューはありませんし、成功した結果にリーズンはありません。

54
00:04:16.704 --> 00:04:21.494
ステータスで分岐してから中身を読む、という順番を習慣にしてください。

55
00:04:21.494 --> 00:04:24.312
記事でもこの確認手順が強調されています。

56
00:04:24.312 --> 00:04:27.856
境界条件として、空の配列を渡した場合を見ます。

57
00:04:27.856 --> 00:04:35.098
空の配列をオールセトルドに渡すと、待つべき処理が一件もないため、空の配列で即座に履行されます。

58
00:04:35.098 --> 00:04:36.793
エラーにはなりません。

59
00:04:36.793 --> 00:04:41.262
実行結果は空の配列で、ノードの実機結果とも一致しています。

60
00:04:41.262 --> 00:04:46.347
前回のレースでは、空の入力が決して決着しなかったのとは対照的です。

61
00:04:46.347 --> 00:04:49.736
エニーでは空入力がすぐにエラーになりました。

62
00:04:49.736 --> 00:04:55.284
三つのメソッドで空入力の扱いがすべて違う点は、間違えやすいポイントです。

63
00:04:55.284 --> 00:05:02.834
候補が空になる可能性のあるコードでは、この動きを前提に、結果が空でも問題ないかを確認してください。

64
00:05:02.834 --> 00:05:06.532
境界条件は記事でも独立した例で紹介されています。

65
00:05:06.532 --> 00:05:12.291
代表的な応用が、一括処理で成功分と失敗分を分けて表示する使い方です。

66
00:05:12.291 --> 00:05:17.711
たとえば複数のファイルの読み込みや、複数の宛先への送信をまとめて実行したあと、

67
00:05:17.711 --> 00:05:23.132
成功した件数と、失敗した理由を画面に表示できます。

68
00:05:23.132 --> 00:05:29.907
スライドの例では、三件中二件が成功し、その件数を数えることを実機で確認しました。

69
00:05:29.907 --> 00:05:37.530
途中で一件失敗しても、残りの結果が失われないため、やり直しが必要なものだけを選び直せます。

70
00:05:37.530 --> 00:05:44.813
記事でも、一括処理で成功分と失敗分を分けて表示できることが用途として紹介されています。

71
00:05:44.813 --> 00:05:49.387
すべて成功しないと意味がない処理には向きませんが、部分的な失敗を許容できる処理では、

72
00:05:49.387 --> 00:05:53.960
とても扱いやすい形です。

73
00:05:53.960 --> 00:05:57.048
注意点の一つ目は、ステータス確認の省略です。

74
00:05:57.048 --> 00:06:01.470
失敗した結果にはバリューが存在しないため、確認せずに読むとアンディファインドが返り、

75
00:06:01.470 --> 00:06:05.892
その後の処理で思わぬ不具合につながります。

76
00:06:05.892 --> 00:06:14.315
スライドの通り、失敗した一件のステータスはリジェクテッドで、バリューはアンディファインドになることを実機で確認しました。

77
00:06:14.315 --> 00:06:18.105
逆に、成功した結果のリーズンもアンディファインドです。

78
00:06:18.105 --> 00:06:22.246
結果を扱うコードでは、まずステータスを見て、成功ならバリュー、失敗ならリーズンを読む、

79
00:06:22.246 --> 00:06:26.388
という分岐を必ず書いてください。

80
00:06:26.388 --> 00:06:31.020
型の絞り込みができる環境では、この分岐が安全性の確認にもなります。

81
00:06:31.020 --> 00:06:33.992
注意点の二つ目は、引数の渡し方です。

82
00:06:33.992 --> 00:06:41.421
配列の中にプロミスでない通常の値を混ぜると、その値は最初から成功したものとして扱われます。

83
00:06:41.421 --> 00:06:48.520
スライドの通り、プレーンという文字列がそのままバリューになることを実機で確認しました。

84
00:06:48.520 --> 00:06:55.454
また、数値のような反復可能なオブジェクトでない値を渡すと、タイプエラーが発生します。

85
00:06:55.454 --> 00:07:04.534
さらに記事では、入力の反復処理そのものが例外を投げる場合まで、必ず成功に変えるわけではないと案内されています。

86
00:07:04.534 --> 00:07:10.972
個々の処理の失敗は結果に格納されますが、呼び出し側の異常は別だということです。

87
00:07:10.972 --> 00:07:15.760
渡す前に入力が配列などであることを確認する習慣が大切です。

88
00:07:15.760 --> 00:07:16.809
まとめです。

89
00:07:16.809 --> 00:07:25.554
プロミス・オールセトルドは、複数の候補のすべての結果を、成功でも失敗でも入力順に集めるメソッドです。

90
00:07:25.554 --> 00:07:27.653
導入時の判断は三つです。

91
00:07:27.653 --> 00:07:34.649
まず、一件の失敗で全体を止めず、全件の成否を知りたい処理かどうかを確認すること。

92
00:07:34.649 --> 00:07:41.820
次に、結果を読むときはステータスを確認してから、バリューかリーズンを取り出すこと。

93
00:07:41.820 --> 00:07:50.216
そして、空の入力では空の配列が返る点と、反復できない値を渡すとエラーになる点を押さえることです。

94
00:07:50.216 --> 00:07:58.786
まずは記事の基本例をコンソールで実行し、成功と失敗の組み合わせを変えて結果を予測してみてください。

95
00:07:58.786 --> 00:08:07.881
オールやエニー、レースとの違いを説明できるようになると、プロミスの組み合わせで迷う場面がぐっと減ります。

96
00:08:07.881 --> 00:08:09.455
お疲れさまでした。

97
00:08:09.455 --> 00:08:12.428
次回はプロミス・オールを学びます。
