回答編集履歴
4
最初の行が変だったので修正
test
CHANGED
@@ -24,11 +24,9 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
まぁ
|
27
|
+
まぁやりたいのはこういうことですね。
|
28
28
|
|
29
|
-
手作業でv1〜v4を繋げるわけですね。
|
30
|
-
|
31
|
-
なんじゃこりゃ、配列の要素
|
29
|
+
なんじゃこりゃ、配列の要素数が増減したらまるで対応出来ないじゃないか!
|
32
30
|
|
33
31
|
|
34
32
|
|
3
ちょっと書き直し
test
CHANGED
@@ -28,13 +28,23 @@
|
|
28
28
|
|
29
29
|
手作業でv1〜v4を繋げるわけですね。
|
30
30
|
|
31
|
-
なんじゃこりゃ、
|
31
|
+
なんじゃこりゃ、配列の要素内を個別に取得していく仕組みに出来ないじゃないか。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
これが質問開始時の困っているポイントですね。
|
36
|
+
|
37
|
+
おっしゃる通りPromiseはこれが辛いです。
|
38
|
+
|
39
|
+
単にforEachやループを使ってしまうと、全てがほぼ同時に走ってしまいしっちゃかめっちゃかになってしまいます。
|
32
40
|
|
33
41
|
|
34
42
|
|
35
43
|
turbgraphics200さんがやってることは、reduceやforEachなどを使って
|
36
44
|
|
37
|
-
塊魂のようにpromiseを転がしながらthenを何度も宣言して付け足していく流れ
|
45
|
+
塊魂のようにpromiseを転がしながらthenを何度も宣言して付け足していく流れです。
|
46
|
+
|
47
|
+
reduceは一見びっくりしますが、よくよく調べると上記の事を着実にこなしているのがわかります。
|
38
48
|
|
39
49
|
|
40
50
|
|
@@ -42,9 +52,15 @@
|
|
42
52
|
|
43
53
|
|
44
54
|
|
45
|
-
|
55
|
+
しかし、初見さんにPromiseやるならreduceつかえと言われても辛いものがあるでしょう。
|
46
56
|
|
57
|
+
ES2017でasync/awaitが用意されていますので、こっち使えば普通のfor文で書けて楽です。
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
async/awaitは内部的にはPromiseを利用していますが、
|
62
|
+
|
47
|
-
|
63
|
+
このようにfor文を使ってまるで同期的であるかのように記述していけます。
|
48
64
|
|
49
65
|
今回はfor...ofを使って書いてみました。
|
50
66
|
|
@@ -60,11 +76,15 @@
|
|
60
76
|
|
61
77
|
for (var v of entity) {
|
62
78
|
|
79
|
+
// awaitを指定するとpromiseのresolveが叩かれるまで待ってくれる
|
80
|
+
|
63
81
|
await output(v);
|
64
82
|
|
65
83
|
}
|
66
84
|
|
67
85
|
} catch (err) {
|
86
|
+
|
87
|
+
// awaitのpromiseがrejectになるとこっちに入る
|
68
88
|
|
69
89
|
logger.error(err.message);
|
70
90
|
|
2
outputからasyncを削除
test
CHANGED
File without changes
|
1
元からpromiseを返す関数からasync宣言を排除
test
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
-
function
|
77
|
+
function output (report) {
|
78
78
|
|
79
79
|
return new Promise((resolve, reject) => {
|
80
80
|
|