回答編集履歴

6

async、awaitをES2015の機能と述べていた点を修正

2016/06/27 11:05

投稿

cither
cither

スコア61

test CHANGED
@@ -124,4 +124,4 @@
124
124
 
125
125
 
126
126
 
127
- ところで、ES2015には`async`,`await`というPromiseよりも強力な非同期処理の仕組みが用意されていますのでそちらを使ってみるのも良いかもしれません。
127
+ ところで、Babelなどのトランスパイラを使えば`async`,`await`というPromiseよりも強力な非同期処理の仕組みができますのでそちらを使ってみるのも良いかもしれません。

5

変数名の修正

2016/06/27 11:05

投稿

cither
cither

スコア61

test CHANGED
@@ -42,9 +42,9 @@
42
42
 
43
43
  return promise.then(function(editedArray) {
44
44
 
45
- return taskB_Work(value).then(function(value) {
45
+ return taskB_Work(value).then(function(editedElement) {
46
46
 
47
- editedArray.push(value);
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

アロー関数をやめた

2016/06/24 06:07

投稿

cither
cither

スコア61

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) => taskB_Work(value).then((value) => {
43
+ return promise.then(function(editedArray) {
44
44
 
45
- editedArray.push(value);
45
+ return taskB_Work(value).then(function(value) {
46
46
 
47
- return editedArray;
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

改行の修正

2016/06/24 06:03

投稿

cither
cither

スコア61

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

回答を補足

2016/06/24 05:49

投稿

cither
cither

スコア61

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
- `arr.reduce(..., Promise.resolve())`値は`Promise`なっいるので、`new Promise()`で囲む必要はありせん
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

誤字の修正

2016/06/24 05:48

投稿

cither
cither

スコア61

test CHANGED
@@ -114,4 +114,4 @@
114
114
 
115
115
 
116
116
 
117
- ところで、ES2015には`async`,`await`というPromiseよりも強力な非同期処理の仕組みが用意されていますのでそちらを使ってみるのも良いかもしれません。
117
+ ところで、ES2015には`async`,`await`というPromiseよりも強力な非同期処理の仕組みが用意されていますのでそちらを使ってみるのも良いかもしれません。