Node.js Promise 链式调用详解

Node.js 非常擅长处理不需要立即执行的任务,比如从网站获取数据。Promise 链式调用(Chaining)帮助我们按特定顺序管理这些任务,使它们依次执行。

  • 顺序执行: 确保异步任务按特定顺序运行,每个任务都等待前一个任务的结果。
  • 错误处理: 提供了一种处理异步操作错误的清晰方法,确保任何问题都能被捕获并得到处理。

语法

promise
    .then(value => {
        return newValue;
    })
    .then(newValue => {
        return anotherValue;
    })
    .catch(error => {

    });
  • .then() 处理 promise 的结果,并可以返回一个新值或一个新的 promise。
  • .catch() 处理 promise 链中发生的错误。

Promise 链的工作原理

Promises 就像是为将来才会发生的事情(比如来自服务器的数据)预留的占位符。链式调用让我们可以决定在事情发生后要做什么。

  • 每个 .then() 都会接收上一步的结果。你可以使用这个结果,然后将新的东西传递给下一步。
  • 从 .then() 返回一个值会自动创建一个新的 promise 来承载该值。这使得链得以继续。如果你从 .then() 返回一个 promise,该链会等待这个 promise 完成后再继续。
  • 末尾的 .catch() 就像是一张安全网。它会捕获链中任何步骤可能发生的任何错误。

!Working of Promises

现在让我们通过一个示例来理解 promise 链

javascript


CODEBLOCK_65e6cb4d

Output

First then: 10
Second then: 20
Final value: 25
  • 创建了一个新的 Promise myPromise,它在 500ms 后以值 10 解析(resolve)。
  • 第一个 .then 接收解析后的值 (10),将其打印,并返回该值乘以 2 的结果。
  • 第二个 .then 接收来自上一个 .then 的结果 (20),将其打印,并返回该值加上 5 的结果。
  • 最后一个 .then 接收结果 (25) 并将其打印。这是链的终点。
  • .catch 块将处理 promise 链中可能发生的任何错误。

在 Promise 链中处理错误

错误处理在异步代码中至关重要。Promise 链提供了一种管理错误的清晰方法。

JavaScript


CODEBLOCK_ec667fab

Output

Error: Something went wrong!
  • Promise 在 500ms 后被拒绝(rejected)。
  • .then 块被跳过,因为 promise 被拒绝了。
  • .catch 块被执行,打印出错误信息。

Promise 链与 Async/Await 的对比

虽然 Promise 链相比回调函数提高了可读性,但 async/await 提供了一种更像同步代码的方法。

使用 Async/Await (等效代码)

JavaScript


CODEBLOCK_8b2b180a

主要区别

特性

Promise 链

Async/Await —

— 可读性

中等

更好 错误处理

.catch()

try/catch 调试

较难

较易 语法复杂度

较高

较低
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/25765.html
点赞
0.00 平均评分 (0% 分数) - 0