📜  js 承诺 - Javascript (1)

📅  最后修改于: 2023-12-03 15:02:23.932000             🧑  作者: Mango

JS承诺 - Javascript

Javascript的承诺(Promise)是一种处理异步操作的方式。在过去,异步操作通常是通过回调函数进行处理,但这种方式难以维护并且文档阅读起来很复杂。由于这些问题,Javascript开始引入承诺作为一种更好的解决方法。

承诺的用途

承诺可以用于处理任何需要异步操作的场景。例如:

  • 从服务器获取数据并显示到应用程序中
  • 记录用户活动并将它们发送到服务器
  • 通过文件上传为用户添加图像等
承诺的基本组成部分

承诺由三个基本组成部分组成:

  1. Promise Object(承诺对象)
  2. The Executor Function(执行函数)
  3. The Consuming Function(消费函数)
Promise Object

承诺对象是一个Javascript对象,表示异步任务的最终状态。承诺对象有三种状态:

  • Pending(待定) - 初始状态,此时承诺对象的值未被解决。
  • Resolved(已解决) - 意味着异步操作被成功地完成,并且承诺对象的最终值得到了解决。一旦承诺被解决,它将永远不会再更改状态。
  • Rejected(被拒绝) - 意味着操作已失败,这个承诺的值无法解决。
The Executor Function

承诺的执行函数是创建承诺的函数。它接受两个参数,resolve和reject。它们分别是按状态解决异步操作的成功和失败函数。

例如,以下示例在异步操作完全成功或失败时将承诺立即解决为已解决或已拒绝的状态。

const promise = new Promise((resolve, reject) => {
  // 异步操作执行...
  if (operationSuccessful) {
    resolve('Success');
  } else {
    reject('Error');
  }
});

在上述示例中,如果操作成功,则解决承诺,并通过传递'done'字符串将其值解决为成功。否则,拒绝解决承诺,值将被解决为'Error'字符串。

The Consuming Function

消费函数是通过承诺对象解决状态并获取已解决值的函数。消费函数接受两个参数,一个用于解决(resolve),另一个用于拒绝(reject)。

例如:

promise.then((value) => {
    console.log(value); // Success
  })
  .catch((error) => {
    console.log(error); // Error
  });

在上述示例中,如果承诺被解决,则当值为'Success'时,值将显示在控制台上,否则,如果承诺被拒绝,则错误消息将显示在控制台上。

承诺的优点
  • 通过返回清晰且易于处理的值,承诺使异步代码更容易阅读。
  • 承诺可使代码更易于维护,因为它们可以更容易地查找特定的异步操作。
  • 承诺可以避免出现回调地狱的情况。
承诺的缺点
  • 承诺需要额外的代码来正确地实现。
  • 承诺可以容易地被滥用,导致代码变得难以管理。
总结

承诺是一种处理异步操作的方式,可以使代码更可读且易于维护,避免了回调地狱的问题。但是,承诺需要额外的代码来实现,并且容易滥用。因此,程序员需要权衡承诺的好处和缺点,以便决定是否使用它们。