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