回答編集履歴
6
async、awaitをES2015の機能と述べていた点を修正
test
CHANGED
@@ -124,4 +124,4 @@
|
|
124
124
|
|
125
125
|
|
126
126
|
|
127
|
-
ところで、
|
127
|
+
ところで、Babelなどのトランスパイラを使えば`async`,`await`というPromiseよりも強力な非同期処理の仕組みが利用できますのでそちらを使ってみるのも良いかもしれません。
|
5
変数名の修正
test
CHANGED
@@ -42,9 +42,9 @@
|
|
42
42
|
|
43
43
|
return promise.then(function(editedArray) {
|
44
44
|
|
45
|
-
return taskB_Work(value).then(function(
|
45
|
+
return taskB_Work(value).then(function(editedElement) {
|
46
46
|
|
47
|
-
editedArray.push(
|
47
|
+
editedArray.push(editedElement);
|
48
48
|
|
49
49
|
return editedArray;
|
50
50
|
|
@@ -116,8 +116,6 @@
|
|
116
116
|
|
117
117
|
});
|
118
118
|
|
119
|
-
|
120
|
-
|
121
119
|
```
|
122
120
|
|
123
121
|
|
4
アロー関数をやめた
test
CHANGED
@@ -38,19 +38,23 @@
|
|
38
38
|
|
39
39
|
function taskB(arr) {
|
40
40
|
|
41
|
-
return arr.reduce((promise, value)
|
41
|
+
return arr.reduce(function(promise, value) {
|
42
42
|
|
43
|
-
return promise.then((editedArray)
|
43
|
+
return promise.then(function(editedArray) {
|
44
44
|
|
45
|
-
e
|
45
|
+
return taskB_Work(value).then(function(value) {
|
46
46
|
|
47
|
-
|
47
|
+
editedArray.push(value);
|
48
48
|
|
49
|
+
return editedArray;
|
50
|
+
|
49
|
-
})
|
51
|
+
});
|
52
|
+
|
53
|
+
});
|
50
54
|
|
51
55
|
}, Promise.resolve([]))
|
52
56
|
|
53
|
-
.catch(()
|
57
|
+
.catch(function() {
|
54
58
|
|
55
59
|
throw new Error("taskB 処理に失敗");
|
56
60
|
|
@@ -102,15 +106,17 @@
|
|
102
106
|
|
103
107
|
|
104
108
|
|
105
|
-
main().then(()
|
109
|
+
main().then(function() {
|
106
110
|
|
107
111
|
console.log("complete!");
|
108
112
|
|
109
|
-
}).catch((error)
|
113
|
+
}).catch(function(error) {
|
110
114
|
|
111
115
|
console.log("error:" + error);
|
112
116
|
|
113
117
|
});
|
118
|
+
|
119
|
+
|
114
120
|
|
115
121
|
```
|
116
122
|
|
3
改行の修正
test
CHANGED
@@ -6,9 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
同期処理をわざわざ非同期処理に変換しているため無用に複雑なコードになっているという印象を持ちました。
|
9
|
+
同期処理をわざわざ非同期処理に変換しているため無用に複雑なコードになっているという印象を持ちました。また、PromiseをさらにPromiseで囲むような冗長な処理も回避可能です。
|
10
|
-
|
11
|
-
また、PromiseをさらにPromiseで囲むような冗長な処理も回避可能です。
|
12
10
|
|
13
11
|
|
14
12
|
|
2
回答を補足
test
CHANGED
@@ -8,15 +8,19 @@
|
|
8
8
|
|
9
9
|
同期処理をわざわざ非同期処理に変換しているため無用に複雑なコードになっているという印象を持ちました。
|
10
10
|
|
11
|
+
また、PromiseをさらにPromiseで囲むような冗長な処理も回避可能です。
|
12
|
+
|
13
|
+
|
14
|
+
|
11
15
|
> promiseの直列処理のいくつかの処理の中で、配列要素を処理するreduceを追加することはできますか?
|
12
16
|
|
13
17
|
|
14
18
|
|
15
|
-
ここの意図が
|
19
|
+
タイトルにも同様のことが書かれていますが、この質問の意図が分かりませんでした。コードを見ていただくのが早いかもしれません。
|
16
20
|
|
17
21
|
|
18
22
|
|
19
|
-
|
23
|
+
ご提示のコードから不要な非同期処理を省いて私なりに書き直してみました。
|
20
24
|
|
21
25
|
|
22
26
|
|
@@ -114,4 +118,8 @@
|
|
114
118
|
|
115
119
|
|
116
120
|
|
121
|
+
`then()`や`catch()`の中で同期例外を投げるとそのPromiseは`reject()`されたことになるので、`taskB`の例外処理ではそれを利用しています。Promiseの例外処理については[この記事](http://qiita.com/gaogao_9/items/40babdf63c73a491acbb)が詳しいです。
|
122
|
+
|
123
|
+
|
124
|
+
|
117
125
|
ところで、ES2015には`async`,`await`というPromiseよりも強力な非同期処理の仕組みが用意されていますのでそちらを使ってみるのも良いかもしれません。
|
1
誤字の修正
test
CHANGED
@@ -114,4 +114,4 @@
|
|
114
114
|
|
115
115
|
|
116
116
|
|
117
|
-
ところで、ES2015には`async`,`await`というPromiseよりも強力な非同期処理の仕組み
|
117
|
+
ところで、ES2015には`async`,`await`というPromiseよりも強力な非同期処理の仕組みが用意されていますのでそちらを使ってみるのも良いかもしれません。
|