回答編集履歴

2

Promise流儀のエラーハンドリングに変更

2020/11/09 18:50

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  .catch(() => requestPromise.put(options))
34
34
 
35
- .catch(e => throw new Error("データ更新に失敗しました。 ErrorMessage : " + e.message));
35
+ .catch(e => Promise.reject(new Error("データ更新に失敗しました。 ErrorMessage : " + e.message)));
36
36
 
37
37
  ```
38
38
 
@@ -44,7 +44,7 @@
44
44
 
45
45
  `.then`や`.catch`の戻り値でPromiseがネストしている場合、
46
46
 
47
- それらを自動的に全て取り除いて値の状態にしてくれます。
47
+ それらを自動suna的に全て取り除いて値の状態にしてくれます。
48
48
 
49
49
 
50
50
 
@@ -84,7 +84,7 @@
84
84
 
85
85
  }
86
86
 
87
- putReq.catch(e => throw new Error("データ更新に失敗しました。 ErrorMessage : " + e.message));
87
+ putReq.catch(e => Promise.reject(new Error("データ更新に失敗しました。 ErrorMessage : " + e.message)));
88
88
 
89
89
  var resp = await putReq;
90
90
 
@@ -110,7 +110,7 @@
110
110
 
111
111
  ).catch(e =>
112
112
 
113
- throw new Error("データ更新に失敗しました。 ErrorMessage : " + e.message)
113
+ Promise.reject(new Error("データ更新に失敗しました。 ErrorMessage : " + e.message))
114
114
 
115
115
  );
116
116
 
@@ -122,46 +122,42 @@
122
122
 
123
123
 
124
124
 
125
- 【おまけ】 エラーの書き方それよかったっけ?
125
+ 【おまけ】 素直にasync/await構文頑張る
126
126
 
127
127
 
128
128
 
129
- awaitが待たPromiseがPromise.reject終わりになる場合、
129
+ async/await構文を使てコードを書くとこんな感じになりますね。
130
130
 
131
- 外で包んだtry-catchで取得出来ます。
132
-
133
-
134
-
135
- 挙動統一ということ解答欄はあのような記述にしましたが、ゃん動作るんでしょうか
131
+ Promise糖衣構文という制約上、catchを握りつぶすのでちょっお行儀が悪いですね
136
-
137
- ちょっと不安……
138
-
139
-
140
-
141
- async/await構文を使っていくなら
142
-
143
- こっちの方が良いでしょう。
144
132
 
145
133
 
146
134
 
147
135
  ```js
148
136
 
149
- try {
137
+ var resp = null;
150
138
 
151
- var resp = await requestPromise.put(options)
139
+ for (let i = 0; i < 4; i++) {
152
140
 
153
- .catch(() => requestPromise.put(options))
141
+ try {
154
142
 
155
- .catch(() => requestPromise.put(options))
143
+ resp = await requestPromise.put(options);
156
144
 
157
- .catch(() => requestPromise.put(options));
145
+ break;
158
146
 
159
- // 後続処理
147
+ } catch (e) {} // お行儀が悪いがエラーは握りつぶす
160
148
 
149
+ }
150
+
161
- } catch (e) {
151
+ if (resp == null) {
162
152
 
163
153
  throw new Error("データ更新に失敗しました。 ErrorMessage : " + e.message)
164
154
 
165
155
  }
166
156
 
167
157
  ```
158
+
159
+
160
+
161
+ やはり`.cache`メソッドをぶら下げながら、
162
+
163
+ ある程度の所まではPromiseで引っ張った方が綺麗に書けるでしょうね。

1

おまけ追加

2020/11/09 18:49

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -115,3 +115,53 @@
115
115
  );
116
116
 
117
117
  ```
118
+
119
+
120
+
121
+ ---
122
+
123
+
124
+
125
+ 【おまけ】 エラーの書き方それでよかったっけ?
126
+
127
+
128
+
129
+ awaitが待ったPromiseがPromise.reject終わりになる場合、
130
+
131
+ 外で包んだtry-catchで取得出来ます。
132
+
133
+
134
+
135
+ 挙動の統一ということで解答欄はあのような記述にしましたが、ちゃんと動作するんでしょうかね?
136
+
137
+ ちょっと不安……
138
+
139
+
140
+
141
+ async/await構文を使っていくなら
142
+
143
+ こっちの方が良いでしょう。
144
+
145
+
146
+
147
+ ```js
148
+
149
+ try {
150
+
151
+ var resp = await requestPromise.put(options)
152
+
153
+ .catch(() => requestPromise.put(options))
154
+
155
+ .catch(() => requestPromise.put(options))
156
+
157
+ .catch(() => requestPromise.put(options));
158
+
159
+ // 後続処理
160
+
161
+ } catch (e) {
162
+
163
+ throw new Error("データ更新に失敗しました。 ErrorMessage : " + e.message)
164
+
165
+ }
166
+
167
+ ```