質問編集履歴
5
fix code
test
CHANGED
File without changes
|
test
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
こちらにもコードを記載しています。[Playground](https://www.typescriptlang.org/play?
|
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
|
-
|
195
|
+
resolve(data.map(a => a * 2))
|
196
|
+
|
188
|
-
|
197
|
+
}, Math.random()*100)
|
198
|
+
|
189
|
-
n
|
199
|
+
}).then(dataB => {
|
190
|
-
|
200
|
+
|
191
|
-
|
201
|
+
// 変換されたらconvertedを呼ぶ
|
202
|
+
|
203
|
+
this.converted(dataB)
|
192
204
|
|
193
205
|
})
|
194
206
|
|
4
test
CHANGED
File without changes
|
test
CHANGED
@@ -277,7 +277,3 @@
|
|
277
277
|
```
|
278
278
|
|
279
279
|
と表示されます。
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
###
|
3
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
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
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
入力データ```A```をデータ```B```に
|
5
|
+
入力データ```A[]```をデータ```B[]```に、さらにデータ```B[]```をデータ```C[]```に変換して、最終的に```C[]```を出力するという処理を行いたいです。ここで条件は以下の通りです。
|
6
6
|
|
7
7
|
|
8
8
|
|
9
9
|
- 開発はTypeScriptで行う
|
10
10
|
|
11
|
-
- データのサイズは大きく変換処理にも時間がかかるため、非同期で行う
|
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
|
このような場合、クラス設計(アーキテクチャ?)はどのようにしたら良いのでしょうか。将来的に機能の追加・修正が行われるため、できるだけ保守性の高いコードにしたいと考えています。
|