回答編集履歴

1

校生

2019/01/16 09:32

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -8,11 +8,25 @@
8
8
 
9
9
  Promise → async/awaitはどういうコードなのかを記述します。
10
10
 
11
+ asyncやawaitは厳密には糖衣構文で、ES6のコードを簡略にしただけの機能です。
12
+
13
+
14
+
15
+ - async: 宣言した箇所で関数内全体を`new Promise()`で包みます。
16
+
17
+ その後、return宣言した箇所の戻り値の部分`resolve()`で包んで状態を完了とし、
18
+
19
+ throwでエラーを投げようとしたら、`reject()`で包んで状態を失敗に変更します。
20
+
21
+ - await: 右辺のPromiseの状態が完了になるまで一生待ち、完了になったら.thenメソッドを実行して値を取り出します。
22
+
23
+
24
+
25
+ つまり、質問文のコードをES6相当に書き直すとこうなります。
26
+
11
27
 
12
28
 
13
29
  ```JavaScript
14
-
15
- // 質問文のコードをES6相当に置き換えたらこうなる
16
30
 
17
31
  module.exports = (taskId) => new Promise((resolve, reject) => {
18
32
 
@@ -48,11 +62,13 @@
48
62
 
49
63
 
50
64
 
51
- これは駄目です
65
+ これは明らかに駄目なコード
52
66
 
53
67
  Promiseの状態が保留から完了・失敗に変化する為には
54
68
 
55
69
  `new Promise`を実行する際に渡したコールバック関数の第一引数や第二引数を実行する必要があります。
70
+
71
+ [Promise - MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)
56
72
 
57
73
 
58
74
 
@@ -116,13 +132,11 @@
116
132
 
117
133
  これでPromiseの状態が保留から完了に変化し、次へ進めるようになります。
118
134
 
119
- async/awaitのawait構文は、右辺のPromiseの状態が完了になるまで一生待ち、完了になったら値を取り出すという糖衣構文です。
120
-
121
135
 
122
136
 
123
137
  次に何故getOneTask内でasync関数を作ってはならないのかを見に行きましょう。
124
138
 
125
- async関数というは下記のコードに換わる糖衣構文です
139
+ 一見これでも行けそうじゃんというasync関数のコードES6版のコードを同時ました
126
140
 
127
141
 
128
142
 
@@ -160,16 +174,14 @@
160
174
 
161
175
 
162
176
 
163
- async関数宣言した箇所関数内全体を`new Promise()`で包みます。
177
+ Task.findByは昔ながらの非同期処理です。
164
178
 
165
- その後、return宣言した箇所戻り値部分`resolve()`で包んで状態を完了とし、
179
+ returnする際は一度task.findByコールバック関数中身に潜ってから
166
180
 
167
- throwでエラーを投げようとしたら、`reject()`で包んで状態失敗に変更
181
+ `resolve(result)`みたいな事をして欲しいでよね?
168
182
 
169
183
 
170
184
 
171
- Task.findByは昔がらの非同期処理です。
185
+ おいおい、お前全然関係無いところでresolveしとるやいか!!となるわけです。
172
186
 
173
- この関数内のコールバック関数の中身`resolve(result)`みたいな事をしていの
187
+ れじゃ駄目、なので全てPromise → Promiseで繋いで行くならasync/awaitをフル活用してスマートに書けるのですが、大昔の非同期処理の部分は一度promiseを返てよしなやってくれる関数で包まなければなりません。
174
-
175
- おいおい、お前全然関係無いところでresolveしとるやないか!!となるわけです。