回答編集履歴

3

誤記

2019/03/06 12:00

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -330,7 +330,7 @@
330
330
 
331
331
  ```
332
332
 
333
- ここでArray.prototype.mapではなくfor文を使っていることに注意してください。先に述べたようにmapは「要素の実行が非同期関数の呼び出しかどうか」「非同期関数の呼び出しなら完了までまつ」なんて配慮を一切しない関数ですのでfor文を使ってかかねばならないのです。「for文書かないとだめなのかぁ」とげっそりするかも知れませんが、それするめには特別な非同期関数同期してくれるようなmapがなければなりません。そういうmap関数は今のところ標準のArrayにはないと思います。
333
+ ここでArray.prototype.mapではなくfor文を使っていることに注意してください。先に述べたようにmapは「要素の実行が非同期関数の呼び出しかどうか」「非同期関数の呼び出しなら完了までまつ」なんて配慮を一切しない関数ですのでfor文を使ってかかねばならないのです。「for文書かないとだめなのかぁ」とげっそりするかも知れませんが、map的な高階関数使いい場合、非同期関数同期的に適用してくれるような特別関数でなければなりません。そういうmap/forEach関数は今のところ標準のArrayにはないと思います。
334
334
 
335
335
 
336
336
 
@@ -340,11 +340,15 @@
340
340
 
341
341
 
342
342
 
343
- Array.prototype.asyncMap = async function (op) {
343
+ Array.prototype.asyncForEach = async function (op) {
344
+
344
-
345
+ for (let i = 0; i < this.length; i++) {
346
+
345
- for (let i in this) {
347
+ if (i in this) {
346
-
348
+
347
- await op(this[i], i)
349
+ await op(this[i], i)
350
+
351
+ }
348
352
 
349
353
  }
350
354
 
@@ -354,7 +358,7 @@
354
358
 
355
359
  async function run(array) {
356
360
 
357
- array.asyncMap(async funcion(ns) { await concurrentMain(ns) })
361
+ array.asyncForEach(async funcion(ns) { await concurrentMain(ns) })
358
362
 
359
363
  log('completed')
360
364
 
@@ -367,3 +371,5 @@
367
371
  ```
368
372
 
369
373
  無理やり書くならこんな感じになってしまうでしょう。
374
+
375
+ 追記: **スミマセン。最初の回答に書いたasyncMapはmapとは言えませんし定義も不適切でした**。単に繰り返しをするだけのものなので関数名をasyncForEachに変更し実装もそれなりにしました。なおオリジナルのforEachに比べ仕様を簡略化しています。)

2

誤記、コードの間違い

2019/03/06 12:00

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -192,7 +192,7 @@
192
192
 
193
193
 
194
194
 
195
- ご質問の最初の段階のthenチェーンの例はPromise.allの引数の実際の書き方を省略しているおつもりなのでしょうが、その書き方にこそ重要な前提知識があるわけで、そこは省略せずに書いて実際に動かしてから質問を発した方がよかったと思います。
195
+ ご質問の最初の段階のthenチェーンの例はPromise.allの引数の実際の書き方を省略しているおつもりなのでしょうが、その書き方にこそ重要な前提知識があるわけで、そこは省略せずに書いて実際に動かしてから質問を発した方がよかったと思います。
196
196
 
197
197
 
198
198
 
@@ -242,7 +242,7 @@
242
242
 
243
243
  cf = array.reduce(
244
244
 
245
- (pre, cur) => () => pre().then(() => cmain(cur)),
245
+ (pre, cur) => () => pre().then(() => concurrentMain(cur)),
246
246
 
247
247
  () => Promise.resolve())
248
248
 

1

日本語訂正

2019/03/06 11:09

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,6 +1,6 @@
1
1
  配列のmapなどで処理を書く前にもっと注意深くご自分のコードを検証(例えば実際に動かして)してみるべきだと思います。
2
2
 
3
- 逆に「メッセージがいつ表示されたか」は重要な情報です。以下の例をまず動かしてみてください。
3
+ なおここでは「メッセージがいつ表示されたか」は重要な情報です。以下の例をまず動かしてみてください。
4
4
 
5
5
 
6
6
 
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- function log(...m) {
13
+ function log(...m) { // メッセージを時刻とともに表示するデバッグ用関数
14
14
 
15
15
  let t = '' + (+new Date() - start)
16
16