非同期関数から Promise への変換

JavaScriptJavaScriptBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、promisify 関数を使って非同期関数を Promise を返す関数に変換する方法を学びます。これにより、コールバック関数を避けて、クリーンで読みやすいコードを書くことができます。また、JavaScript におけるカリングと残余引数演算子の使い方についても検討します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/ToolsandEnvironmentGroup(["Tools and Environment"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/AdvancedConceptsGroup -.-> javascript/async_prog("Asynchronous Programming") javascript/AdvancedConceptsGroup -.-> javascript/spread_rest("Spread and Rest Operators") javascript/ToolsandEnvironmentGroup -.-> javascript/debugging("Debugging") subgraph Lab Skills javascript/variables -.-> lab-28559{{"非同期関数から Promise への変換"}} javascript/data_types -.-> lab-28559{{"非同期関数から Promise への変換"}} javascript/arith_ops -.-> lab-28559{{"非同期関数から Promise への変換"}} javascript/comp_ops -.-> lab-28559{{"非同期関数から Promise への変換"}} javascript/async_prog -.-> lab-28559{{"非同期関数から Promise への変換"}} javascript/spread_rest -.-> lab-28559{{"非同期関数から Promise への変換"}} javascript/debugging -.-> lab-28559{{"非同期関数から Promise への変換"}} end

promisify 関数

非同期関数を Promise を返す関数に変換するには、次の手順に従います。

  1. ターミナル/SSH を開き、コーディングを練習するために node と入力します。
  2. カリングを使って、元の関数を呼び出す Promise を返す関数を返します。
  3. 残余引数演算子 (...) を使ってすべてのパラメータを渡します。
  4. Node 8+ を使っている場合、util.promisify を使うことができます。
  5. 以下はコードの例です。
const promisify =
  (func) =>
  (...args) =>
    new Promise((resolve, reject) =>
      func(...args, (err, result) => (err ? reject(err) : resolve(result)))
    );
  1. この関数を使うには、非同期関数を定義して、それを promisify 関数のパラメータとして渡します。返される関数は現在 Promise を返します。
const delay = promisify((d, cb) => setTimeout(cb, d));
delay(2000).then(() => console.log("Hi!")); // Promise resolves after 2s

delay 関数は、promisify 関数を使って現在 Promise を返す非同期関数の例です。

まとめ

おめでとうございます!あなたは promisify 関数の実験を完了しました。あなたの技術を向上させるために、LabEx でさらに実験を行って練習することができます。