2つの独立した読み取り
CoddyのNode.jsジャーニー「Node.jsの基礎」セクションの一部。レッスン 24/33。
一方の結果をもう一方が必要としない場合、2つの読み取りを同時に開始できます。Promise.allはそれらのPromiseを受け取り、結果の配列をまとめた1つのPromiseを返します。その配列を一度だけawaitします。
const [name, city] = await Promise.all([
readFile('name.txt', 'utf8'),
readFile('city.txt', 'utf8'),
]);2つ目の読み取りが先に完了した場合でも、最初の結果は最初のPromiseに対応します。角括弧を使うと、2つの結果を別々の変数に割り当てられます。どちらかの読み取りに失敗すると、まとめたPromiseは拒否されます。一方の処理で前の結果が必要な場合は、awaitを別々に使います。
付属の練習用リーダーは、もう一方の読み取りが開始される前にawaitされた読み取りを拒否します。これにより、早すぎる待機が目に見えるようになります。実行速度を測定するものではありません。
チャレンジ
簡単これは小さな練習プロジェクトです。セットアップは用意されています。編集するのはpractice.jsだけです。
note.txtとowner.txtをPromise.allで読み込みます。その結果を使ってAda: Buy milkを出力します。入力配列ではnoteを先にしてください。「実行」するとnode practice.jsが実行されます。
インポートしたreaderを使います。待つ前に両方の読み込みを開始してください。この練習用readerでは、順番にawaitする方法は意図的に拒否されます。
用意されているnoteFileとownerFileの値を使います。other-note.txt other-owner.txtを指定して実行すると、Bo: Walkが期待されます。
自分で試してみよう
import { readFile } from './reader.js';
const [noteFile = 'note.txt', ownerFile = 'owner.txt'] = process.argv.slice(2);
const note = '';
const owner = '';
console.log(owner + ': ' + note);
Node.jsの基礎のすべてのレッスン
自分で練習してみよう: Expressプレイグラウンド