回答編集履歴
3
誤記
test
CHANGED
@@ -330,7 +330,7 @@
|
|
330
330
|
|
331
331
|
```
|
332
332
|
|
333
|
-
ここでArray.prototype.mapではなくfor文を使っていることに注意してください。先に述べたようにmapは「要素の実行が非同期関数の呼び出しかどうか」「非同期関数の呼び出しなら完了までまつ」なんて配慮を一切しない関数ですのでfor文を使ってかかねばならないのです。「for文書かないとだめなのかぁ」とげっそりするかも知れませんが、
|
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.async
|
343
|
+
Array.prototype.asyncForEach = async function (op) {
|
344
|
+
|
344
|
-
|
345
|
+
for (let i = 0; i < this.length; i++) {
|
346
|
+
|
345
|
-
f
|
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.async
|
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
誤記、コードの間違い
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(() => c
|
245
|
+
(pre, cur) => () => pre().then(() => concurrentMain(cur)),
|
246
246
|
|
247
247
|
() => Promise.resolve())
|
248
248
|
|
1
日本語訂正
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
|
|