質問編集履歴

5

fix code

2020/09/04 09:03

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
 
38
38
 
39
- こちらにもコードを記載しています。[Playground](https://www.typescriptlang.org/play?ts=4.0.2#code/PTAEiKGQyhkCYZHWGRhhmoOwZBCDIaIZBzDIH4ZCTDAWACgBLAOwBcBTAJwDMBDAYwtAEkBlAewFcqmA5DgBMKAHgDyXMgD5QAb0KhQDDiRIUGZABRqAHmQHCAXKwAiFAM5lSdKyoOiJ0gJTGAbhyKDCAX0KEQoIAlDIDPDAjI6Nj4xOTU9EymFlYkNkR2QqIsJDLyBIoADhyWmoI2dMaZANoAui6g7p4+ftGUtIzMLADCKq7ULfYimQA0oI4yFHoUJILmrJw8-OniklLDLGaW1rYk-ZnZjQT+YIDjDFiA-QyZgEkMgOvKgIoMgGvKgMYMgGYMjoDWDICQmoDbxoCaDGiAEQyAMQZAFYMgC-1QCpeoB6hkAlwyAToZCAwADZ0cwzLokHpUPqLIYjZagIgAWzyCIoBMmZBmnW6vWoOxIw1GcgUoDyVCIrhszAAjlwKLzyiRqqAALygarM1nszn48xojFJADmItA9AR5mYAS+gDPFQBgLoBaOUA0gwStkcyigABGNgYAAs2EQAF4UYwkLgE83UUABQB+DIALBkAgQxPQCACWgTqckIAHU2NUrNun06QAhOV1kkUmlhEtpE1FMoSJYqFwNBwqJpLWQbXbHc7Xe6qE4mblFKAyNaiOYAHSl8sO5iizu27vM3wHBsBSIXQDSfoAlBjQzJzag02nGcaMCQ2yS2-VGdZyjabLfbsfsysP6UHWc9xzOABVrvcZw2CkUSmQyqxBTU3B5BPXd83W22eT5Cg2zyLhzGtTQ2yg586CcABuC9QFuR5AH0GUMLkAWoZAFOGLBXkAXflAEBjc9FE1T49UAcwYgRuQAYhkABwYvguQBo1MAac1flATRADAMwB4vQuPDAB4o34UL9JxmUUIgaHY+M-3bVs5V6UglQAMkUvd-0A3k2xJEgFWbUApFFaSOytftHW3UTGxzSwLWM5VDPU4DzGJIgmE0AAGYZDL7CsKBEhtf33Nsc3lEtjN83ch0UIdmVI3ULkAGQiAWNDhKA0ChvyC3pilKAVqlqepvx3UAopHMAvkAVQZqLQs4LkAQmskEiTQqXRGkqHsL0UMAewY1kSTZUm2dInFeYMkpSyh0upTE0qyl9jEcXKf0bQyT2EEDCi0GDfPMgJsNwr1AAMGL5yMAWQYQzOQAZBkADW1AAp1X4gUASIYMsxX5zPE9i7N5DStJ0609IMgKvO7My-IslQrL7WyAvsttHIRZyKDcjz-uM7ywt3VT20erQ+1RyLQAoNVmEK-z-1kibFWVVV1XMiKiv2QgyAATzyZgAEFj2rah6aZ5gACF2bdTnhwCUMWYuUMeY+H40GhOECERZEZhZnm5Mmqg8YmKZUTJ2lFhZ4Yeb2BtLLIfNC2LAHK1AF0BdrBbFHMLhmfN5HAbPYcSNKz5YoSkb1DGpQyem18Wdyz9PDt9HAu1wQg7bAk6DyTQ6BFGRk4AKlAAAmJwcatigAHdQAABSoDgCVbeGqAsDgER6FOI8UKvzBrnpY-jxPk+FVPQAz7O6wCQBVeQNQB1BjupBAFnEwARBl1anUaHYqAkAU0VAGylSJ4SRFFQDmXgKCPQliVJclKW3hZ0xZw38hNaVlooRNVxTDdFgN885z9xc9HsJMevXPr+nPoHiYHiXEeUUN83bRUvKcC4KsWhDUAIfyzJ1RTCDsYEONQI5LWAekVaT5ShzzpgQAIgAvxVXrgdi5VKqhg6GdQAygw0NeChQAlgyACiGQAAu6AHkGXy8tN7Jl6mmZg+8SRknIJSXhP9+EiANgtR861sqgB5vNImAdcw12AgiDgCog74IIMVY2oBm7zB7HnQuJ9d7pE0Fw0GZBQB0HNMeAuoAlYwOoJoAAzJY3M1jbGZ3sYXJx2tizuPhFY0AwgrKgIcWI1M-VhAWKaAEAxO9QAAFpU52NSTY80PiMlhOsT6UMZ1ACCttRe8iSmBR1UG-WxvlbEVPnFobxNSsl1LfrkzaBAykOUmDHCoABGYYmdhiuOGAAFmGAAVmGAANhqIQIAA)
39
+ こちらにもコードを記載しています。[Playground](https://www.typescriptlang.org/play?ssl=37&ssc=31&pln=36&pc=57#code/PTAEiKGQyhkCYZHWGRhhmoOwZBCDIaIZBzDIH4ZCTDAWACgBLAOwBcBTAJwDMBDAYwtAEkBlAewFcqmA5DgBMKAHgDyXMgD5QAb0KhQDDiRIUGZABRqAHmQHCAXKwAiFAM5lSdKyoOiJ0gJTGAbhyKDCAX0KEQoIAlDIDPDAjI6Nj4xOTU9EymFlYkNkR2QqIsJDLyBIoADhyWmoI2dMaZANoAui6g7p4+ftGUtIzMLADCKq7ULfYimQA0oI4yFHoUJILmrJw8-OniklLDLGaW1rYk-ZnZjQT+YIDjDFiA-QyZgEkMgOvKgIoMgGvKgMYMgGYMjoDWDICQmoDbxoCaDGiAEQyAMQZAFYMgC-1QCpeoB6hkAlwyAToZCAwADZ0cwzLokHpUPqLIYjZagIgAWzyCIoBMmZBmnW6vWoOxIw1GcgUoDyVCIrhszAAjlwKLzyiRqqAALygarM1nszn48xojFJADmItA9AR5mYAS+gDPFQBgLoBaOUA0gwStkcyigABGNgYAAs2EQAF4UYwkLgE83UUABQB+DIALBkAgQxPQCACWgTqckIAHU2NUrNun06QAhOV1kkUmlhEtpE1FMoSJYqFwNBwqJpLWQbXbHc7Xe6qE4mblFKAyNaiOYAHSl8sO5iizu27vM3wHBsBSIXQDSfoAlBjQzJzag02nGcaMCQ2yS2-VGdZyjabLfbsfsysP6UHWc9xzOABVrvcZw2CkUSmQyqxBTU3B5BPXd83W22eT5Cg2zyLhzGtTQ2yg586CcABuC9QFuR5AH0GUMLkAWoZAFOGLBXkAXflAEBjc9FE1T49UAcwYgRuQAYhkABwYvguQBo1MAac1flATRADAMwB4vQuPDAB4o34UL9JxmUUIgaHY+M-3bVs5V6UglQAMkUvd-0A3k2xJEgFWbUApFFaSOytftHW3UTGxzSwLWM5VDPU4DzGJIgmE0AAGYZDL7CsKBEhtf33NtZOpTEFNs-MKHMxRDJzeUS2M3zdyHRQh2ZUjdQuQAZCIBY0OEoDQKG-GLemKUoBWqWp6m-HdQBSkcwC+QBVBmotCzguQBCayQSJNCpdEaSoewvRQwB7BjWRJNlSbZ0icV5gxyvLKEK4KFpKl9jEccqf0bQyT2EEDCi0GDfPMgJsNwr1AAMGL5yMAWQYQzOQAZBkADW1AAp1X4gUASIYisxX5zPE9i7N5DStJ0609IMgKvO7My-IslQrL7WyAvsttHIRZyKDcjyIeM7yEt3VT2y+rQ+zx5LQAoNVmGq-z-yC3qQu05VVXVcykpq-ZCDIABPPJmAAQWPatqE5nnmAAIUFt1heHAJQz5i5QzFj4fjQaE4QIRFkRmPmxbkzEPSXSZplAPWsXTPnhjFvYG0ssh80LYtIcrUAXSl2tNsUcwuF5x2cahs9hxI+rPnSrK5vUBalCWlbXz58rP08D2XYoAB3UAAAUqA4AlW1EMXqikTQqAsDgER6EVrfxxDAFV5A1AHUGd6kEAWcTABEGXVItAdUyCvQkKG4LRNDrYVK6r0Bi-MUuehjtsCToPJNDoCvQEXgAqUAACYnFJxtvGGABZGxrTbKg6CmbPB5XgBGVzXO37wnDbZtJhjiXh6ToPQEa5rPqWgqLkAHxVABuDB3aKv9BAvzvnjIctUAiAFNFQA2UqRHhEiFEoA5i8AoEeQkxJSTkkpOghY5sR6SlNMwHaFBEyrhTBuRYVtzxzgjouPQ9gkxjXXBNfofMpDQxpgeJcR5RTkIDqlS8pwLim2oDNQAh-LMnVFMGOxg441CTttfh6Q9pPlKFAjmBAAiAC-FRBuB2JfxaqcDo91ADKDBY14KFACWDIAKIZAAC7oAeQZfKa1QcmcaaZmDYJJGScglJPHsO8SIK2m1HwHVKqAfOyjqZR1zKXYCCIOAKhjtoggtVbad24Bg48qc0E5MIRjNxcMyDL3NHktOOsJHFgAMwlNzGUug5p16VNANU3+dSGlWWEFZQR+SgmpkmsIQeTQAgT3mMwAAtDIZpoAZnlNaQs3pZSfShnuoAQVtqL3gmRgtsDCFzNN8s0-ZKh5xaGaZvQglzTmqEYSso6BBdlMBRkbTQFRL7DHXsMWpwwAAswwACswwABsNRCBAA)
40
40
 
41
41
 
42
42
 
@@ -114,6 +114,8 @@
114
114
 
115
115
  const batch = this.queue.splice(0, this.batchSize)
116
116
 
117
+ this.isConverting = true
118
+
117
119
  this.convert(batch)
118
120
 
119
121
  }
@@ -184,11 +186,21 @@
184
186
 
185
187
  protected convert(data: A[]): void {
186
188
 
189
+ new Promise<B[]>(resolve => {
190
+
191
+ // 何かしらの重い処理
192
+
193
+ setTimeout(() => {
194
+
187
- this.converted(data.map(a => a * 2))
195
+ resolve(data.map(a => a * 2))
196
+
188
-
197
+ }, Math.random()*100)
198
+
189
- new Promise(resolve => {
199
+ }).then(dataB => {
190
-
200
+
191
- resolve(data.map(a => a * 2)) // 何かしらの重い処理
201
+ // 変換されたらconvertedを呼ぶ
202
+
203
+ this.converted(dataB)
192
204
 
193
205
  })
194
206
 

4

2020/09/04 09:03

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -277,7 +277,3 @@
277
277
  ```
278
278
 
279
279
  と表示されます。
280
-
281
-
282
-
283
- ###

3

2020/09/04 04:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  - 開発はTypeScriptで行う
10
10
 
11
- - データのサイズは大きく変換処理にも時間がかかるため、非同期で行う
11
+ - データのサイズは大きく変換処理にも時間がかかるため、非同期で行う (実際はWebWorkerを用いる)
12
12
 
13
13
  - ユーザーは変換処理中に関わらず任意のタイミングでデータ```A```を何個でも入力することができる
14
14
 
@@ -18,6 +18,8 @@
18
18
 
19
19
  - 変換```A```→ ```B```が全て終わってから変換```B```→ ```C```を行うのではなく、例えば変換```A```→ ```B```が100個終わったら変換```B```→ ```C```を100個...と逐次的に行う (データ```A```の最初の入力時からデータ```C```の最初の出力までのレスポンスをできるだけ短くしたいため)
20
20
 
21
+ - 変換```B```→ ```C```が処理されている間にも変換```A```→ ```B```を処理したい
22
+
21
23
 
22
24
 
23
25
  このような場合、クラス設計(アーキテクチャ?)はどのようにしたら良いのでしょうか。将来的に機能の追加・修正が行われるため、できるだけ保守性の高いコードにしたいと考えています。

2

2020/09/04 04:20

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  - データはいくつかまとめて処理をする (ex. 1000個の```A```を入力すると、100個ずつに分割されて順番に処理される)
18
18
 
19
+ - 変換```A```→ ```B```が全て終わってから変換```B```→ ```C```を行うのではなく、例えば変換```A```→ ```B```が100個終わったら変換```B```→ ```C```を100個...と逐次的に行う (データ```A```の最初の入力時からデータ```C```の最初の出力までのレスポンスをできるだけ短くしたいため)
20
+
19
21
 
20
22
 
21
23
  このような場合、クラス設計(アーキテクチャ?)はどのようにしたら良いのでしょうか。将来的に機能の追加・修正が行われるため、できるだけ保守性の高いコードにしたいと考えています。
@@ -273,3 +275,7 @@
273
275
  ```
274
276
 
275
277
  と表示されます。
278
+
279
+
280
+
281
+ ###

1

fix typo

2020/09/04 04:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
 
4
4
 
5
- 入力データ```A```をデータ```B```に変換しそのデータ```B```をデータ```C```に変換して```C```を出力するという処理を行いたいです。ここで条件は以下の通りです。
5
+ 入力データ```A[]```をデータ```B[]```に、さらにデータ```B[]```をデータ```C[]```に変換して、最終的に```C[]```を出力するという処理を行いたいです。ここで条件は以下の通りです。
6
6
 
7
7
 
8
8
 
9
9
  - 開発はTypeScriptで行う
10
10
 
11
- - データのサイズは大きく変換処理にも時間がかかるため、非同期で行う (WebWorker等使用)
11
+ - データのサイズは大きく変換処理にも時間がかかるため、非同期で行う
12
12
 
13
13
  - ユーザーは変換処理中に関わらず任意のタイミングでデータ```A```を何個でも入力することができる
14
14
 
@@ -16,8 +16,6 @@
16
16
 
17
17
  - データはいくつかまとめて処理をする (ex. 1000個の```A```を入力すると、100個ずつに分割されて順番に処理される)
18
18
 
19
- - たまった処理が終わったらユーザーに通知し、再びデータの入力に備える
20
-
21
19
 
22
20
 
23
21
  このような場合、クラス設計(アーキテクチャ?)はどのようにしたら良いのでしょうか。将来的に機能の追加・修正が行われるため、できるだけ保守性の高いコードにしたいと考えています。