回答編集履歴
1
校生
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
|
-
asy
|
177
|
+
Task.findByは昔ながらの非同期処理です。
|
164
178
|
|
165
|
-
|
179
|
+
returnする際は一度task.findByのコールバック関数の中身に潜ってから
|
166
180
|
|
167
|
-
|
181
|
+
`resolve(result)`みたいな事をして欲しいですよね?
|
168
182
|
|
169
183
|
|
170
184
|
|
171
|
-
|
185
|
+
おいおい、お前全然関係無いところでresolveしとるやないか!!となるわけです。
|
172
186
|
|
173
|
-
この
|
187
|
+
これじゃ駄目、なので全てPromise → Promiseで繋いで行くならasync/awaitをフル活用してスマートに書けるのですが、大昔の非同期処理の部分は一度promiseを返してよしなにやってくれる関数で包まなければなりません。
|
174
|
-
|
175
|
-
おいおい、お前全然関係無いところでresolveしとるやないか!!となるわけです。
|