Coursera 笔记

Module 02 · Asynchronous I/O with callback programming异步 I/O 与回调编程

PromisesPromise 的介绍:理解 Promise 的状态与应用

Coursera ↗

🎥 本视频内容:
通过本视频的学习,您将能够:

  • 定义Promise
  • 解释Promise的不同状态
  • 描述如何在异步方法中使用Promise

什么是Promise?

Promise的定义

Promise 是由异步方法返回的对象。Promise代表着一个可能在未来完成或失败的操作,具体取决于异步操作的结果。Promise 有三个状态:

  • Pending(等待中):初始状态,表示操作正在进行中
  • Resolved(已完成):表示操作成功完成
  • Rejected(已拒绝):表示操作失败

Promise的状态及其转换

Promise的状态

  1. Pending(等待中)
    初始状态,表示异步操作正在执行中。
  2. Resolved(已完成)
    当异步操作成功完成,Promise会进入已完成状态。
  3. Rejected(已拒绝)
    如果异步操作失败或出错,Promise会进入已拒绝状态。

Promise的使用场景

Promise 通常用于以下几种情况:

  • API请求
  • 输入输出操作
  • 其他耗时且可能阻塞资源的操作

例如,在执行一个耗时的操作时,可以使用Promise来管理操作的状态,避免阻塞其他任务。


Promise的创建与使用

如何创建Promise对象?

当你知道某个操作可能会耗时并且会阻塞资源时,可以使用Promise来处理。以下是一个例子,展示了如何创建并使用Promise:

示例代码

let methCall = new Promise((resolve, reject) => {
  if (fileIsValid) {
    resolve(fileContent);  // 操作成功,Promise变为resolved状态
  } else {
    reject("Error: Invalid file");  // 操作失败,Promise变为rejected状态
  }
});

在这个例子中,methCall 是一个Promise对象。它会根据文件是否成功读取来决定是完成(resolved)还是失败(rejected)。如果文件名有效,Promise会进入resolved状态,显示文件内容;如果文件名无效,则进入rejected状态,显示错误信息。


Node.js中的Promise:HTTP请求的应用

HTTP请求与Promise

在Node.js中,当你调用同步的HTTP请求时,这些请求可能会阻塞。为了避免阻塞,很多Node.js生态系统中的包(如 axios)会将HTTP请求封装成Promise对象。

示例:使用axios包

axios 是一个处理HTTP请求的包,它返回一个Promise对象。当你发出请求时,Promise的状态将一直是pending,直到从指定的URL收到响应。

axios.get('https://valid-url.com')
  .then(response => {
    console.log(response.data);  // Promise resolved
  })
  .catch(error => {
    console.log(error);  // Promise rejected
  });

示例输出

  1. 当您传递有效的URL时,Promise会进入resolved状态,返回的响应数据会被打印到控制台。
  2. 当传递无效的URL时,Promise会进入rejected状态,错误信息会被捕获并打印到控制台。

本视频总结

在本视频中,您学到了:

  • Promise 是由异步方法返回的对象,表示可能在未来完成或失败的操作。
  • Promise的初始状态是pending,它会根据异步操作的结果变为resolved(完成)或rejected(拒绝)。
  • 在Node.js中,axios包用于处理HTTP请求,它返回一个Promise对象,帮助避免阻塞操作。
  • 当您知道某些操作可能会阻塞时,可以创建Promise对象以处理这些操作。

通过学习Promise的使用,您可以更有效地管理异步操作,避免阻塞和复杂的回调地狱问题。🚀