kei0425tan’s blog

技術的なことを主に

mapでasync/awaitを利用する

久しぶりに、JavaScriptのasync/awaitの話です。

(node v7.9.0で記載しています。)

webをスクレイピングする時など、リストを元に非同期処理を行いたいことがあるかと思います。

その際に、mapで呼び出す関数をasync指定で定義しても、かえってくるのはPromiseオブジェクトになり、扱いにくいです。

ちゃんと実行を待ち、中身を取り出すには、基本に立ち返り、Promise.allを利用すればうまく取り出せます。


gist0b1e7b16be289ce69bfe566797afaff6

結果はこちら

[ Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> } ]

実行中にも関わらず、mainが終了してしまっています。



gist182cab9bbc634255a0f3e8b70d991f19

結果はこちら

[ { filename: 'data/all1.txt', length: 19846 },
  { filename: 'data/all2.txt', length: 17212 },
  { filename: 'data/all3.txt', length: 21116 },
  { filename: 'data/all4.txt', length: 13751 } ]

ちゃんと中身が確認できました!

以前の記事はこちら
kei0425tan.hatenablog.com
kei0425tan.hatenablog.com