はじめに
この実験では、JavaScript を使った非同期プログラミングにおける関数合成の概念を探求します。pipeAsyncFunctions 関数を使って、単一の引数を受け取り、通常の値、Promise、または async であることができる一連の非同期関数を合成する方法を学びます。この実験が終了するとき、関数合成を使ってより効率的で読みやすい非同期コードを書く方法を十分に理解しているでしょう。
JavaScript で非同期関数をパイプする方法
JavaScript でコーディングを練習するには、ターミナル/SSH を開いて node と入力します。基本に慣れたら、非同期関数を使い始めることができます。
pipeAsyncFunctions 関数を使うと、非同期関数を左から右に関数合成できます。その仕組みは以下の通りです。
- この関数は任意の数の非同期関数を引数として受け取ります。
- 展開演算子 (
...) を使って、これらの関数をpipeAsyncFunctions関数に個別の引数として渡します。 - 結果として得られる関数は任意の数の引数を受け取ることができますが、合成する各関数は単一の引数を受け取る必要があります。
- 関数は通常の値、Promise の組み合わせを返すことができ、または
asyncでawaitを通じて返すことができます。 reduce()メソッドとPromise.prototype.then()を使って関数合成を行います。reduce()メソッドは関数を反復処理し、順番に各関数を実行して、1 つの関数の結果を次の関数に渡します。- 結果として得られる Promise が返されます。
数値を合計するために pipeAsyncFunctions を使う方法の例を以下に示します。
const sum = pipeAsyncFunctions(
(x) => x + 1,
(x) => new Promise((resolve) => setTimeout(() => resolve(x + 2), 1000)),
(x) => x + 3,
async (x) => (await x) + 4
);
(async () => {
console.log(await sum(5)); // 15 (1 秒後)
})();
この例では、sum は入力数値に異なる値を加算する 4 つの関数で構成されています。sum の最終値は、各関数を順番に実行した結果で、2 番目の関数には 1 秒間の遅延があります。最後の関数には async キーワードを使って await を使用できるようにしています。
pipeAsyncFunctions を使うことで、任意の数の非同期関数を簡単に合成して、より複雑な機能を作成することができます。
まとめ
おめでとうございます!あなたは「非同期関数をパイプする」実験を完了しました。あなたの技術を向上させるために、LabEx でさらに実験を練習することができます。