步骤如下:
- 创建一个Promise对象:通过调用Promise构造函数,传入一个函数作为参数,这个函数被称为执行器函数。执行器函数接受两个参数,分别是resolve和reject,它们是两个函数,用于表示Promise的状态变化
- 执行异步操作:在执行器函数中,可以执行异步操作,例如发起一个网络请求或读取文件
- 根据异步操作的结果,调用resolve或reject函数:当异步操作成功完成时,调用resolve函数,并传递结果数据作为参数;当异步操作失败时,调用reject函数,并传递错误信息作为参数
- 处理Promise的状态变化:通过调用Promise实例的then方法,可以注册一个或多个回调函数,用于处理Promise的状态变化。then方法接受两个参数,分别是成功状态的回调函数和失败状态的回调函数
- 链式调用then方法:then方法返回一个新的Promise实例,可以通过链式调用then方法,实现对多个异步操作的顺序控制和数据传递
- 处理异常:通过调用Promise实例的catch方法,可以注册一个回调函数,用于捕获异常并进行处理
代码:
function fetchData() {
return new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
const data = 'Hello, World!';
// 模拟异步操作成功
resolve(data);
// 模拟异步操作失败
// reject(new Error('Failed to fetch data.'));
}, 1000);
});
}
fetchData()
.then(data => {
console.log('Data:', data);
return data.toUpperCase();
})
.then(upperCaseData => {
console.log('Upper case data:', upperCaseData);
})
.catch(error => {
console.error('Error:', error);
});
在上述示例中,fetchData函数返回一个Promise实例,通过调用then方法注册了两个回调函数,分别用于处理异步操作成功和失败的情况。在第一个回调函数中,将数据转为大写字母;在第二个回调函数中,打印转换后的数据。如果异步操作失败,则会调用catch方法注册的回调函数,打印错误信息