Module 02 · Asynchronous I/O with callback programming异步 I/O 与回调编程
PromisesPromise 的介绍:理解 Promise 的状态与应用
🎥 本视频内容:
通过本视频的学习,您将能够:
- 定义Promise
- 解释Promise的不同状态
- 描述如何在异步方法中使用Promise
什么是Promise?
Promise的定义
Promise 是由异步方法返回的对象。Promise代表着一个可能在未来完成或失败的操作,具体取决于异步操作的结果。Promise 有三个状态:
- Pending(等待中):初始状态,表示操作正在进行中
- Resolved(已完成):表示操作成功完成
- Rejected(已拒绝):表示操作失败
Promise的状态及其转换
Promise的状态
- Pending(等待中)
初始状态,表示异步操作正在执行中。 - Resolved(已完成)
当异步操作成功完成,Promise会进入已完成状态。 - 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
});
示例输出
- 当您传递有效的URL时,Promise会进入resolved状态,返回的响应数据会被打印到控制台。
- 当传递无效的URL时,Promise会进入rejected状态,错误信息会被捕获并打印到控制台。
本视频总结
在本视频中,您学到了:
- Promise 是由异步方法返回的对象,表示可能在未来完成或失败的操作。
- Promise的初始状态是pending,它会根据异步操作的结果变为resolved(完成)或rejected(拒绝)。
- 在Node.js中,
axios包用于处理HTTP请求,它返回一个Promise对象,帮助避免阻塞操作。 - 当您知道某些操作可能会阻塞时,可以创建Promise对象以处理这些操作。
通过学习Promise的使用,您可以更有效地管理异步操作,避免阻塞和复杂的回调地狱问题。🚀