将异步函数转换为 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

将异步函数转换为返回 Promise 的函数

要将异步函数转换为返回 Promise,请按以下步骤操作:

  1. 打开终端/SSH 并输入 node 开始练习编码。
  2. 使用柯里化返回一个返回 Promise 的函数,该 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 在 2 秒后 resolve

delay 函数是一个异步函数的示例,它现在使用 promisify 函数返回一个 Promise。

总结

恭喜你!你已经完成了“将异步函数转换为返回 Promise 的函数”实验。你可以在 LabEx 中练习更多实验来提升你的技能。