在JavaScript中,Promise对象的状态由其内部的resolve和reject函数来改变。通过调用resolve函数,Promise对象的状态从pending(进行中)变为fulfilled(已完成),并传递一个值作为结果;通过调用reject函数,Promise对象的状态从pending(进行中)变为rejected(已失败),并传递一个错误作为原因。
修改Promise对象的状态
1. 使用resolve函数
Promise对象的resolve函数用于将Promise对象的状态从pending(进行中)变为fulfilled(已完成)。它接收一个参数作为Promise对象的结果值,并在调用后将该值传递给通过then方法注册的回调函数。
代码语言:javascript复制const promise = new Promise((resolve, reject) => {
// 执行异步操作
// 操作成功完成后调用resolve函数
resolve('Operation succeeded'); // 将Promise状态改为fulfilled,并传递结果值
});
promise.then(result => {
console.log(result); // 输出: Operation succeeded
});
在上述示例中,我们创建了一个新的Promise对象,并在其构造函数中调用resolve函数来改变Promise对象的状态为fulfilled。在调用resolve函数时,我们传递了一个字符串作为结果值。然后,我们通过then方法注册了一个回调函数,当Promise对象状态变为fulfilled时,该回调函数会被执行并输出结果值。
2. 使用reject函数
Promise对象的reject函数用于将Promise对象的状态从pending(进行中)变为rejected(已失败)。它接收一个参数作为Promise对象的失败原因,并在调用后将该错误原因传递给通过catch方法注册的回调函数。
代码语言:javascript复制const promise = new Promise((resolve, reject) => {
// 执行异步操作
// 操作失败后调用reject函数
reject(new Error('Operation failed')); // 将Promise状态改为rejected,并传递错误原因
});
promise.catch(error => {
console.error(error); // 输出: Error: Operation failed
});
在上述示例中,我们创建了一个新的Promise对象,并在其构造函数中调用reject函数来改变Promise对象的状态为rejected。在调用reject函数时,我们传递了一个Error对象作为错误原因。然后,我们通过catch方法注册了一个回调函数,当Promise对象状态变为rejected时,该回调函数会被执行并输出错误原因。
示例代码
下面是一个完整的示例代码,演示了如何使用resolve和reject函数来修改Promise对象的状态:
代码语言:javascript复制function performAsyncTask() {
return new Promise((resolve, reject) => {
// 模拟异步操作
const isSuccess = Math.random() < 0.5;
if (isSuccess) {
resolve('Operation succeeded'); // 将Promise状态改为fulfilled,并传递结果值
} else {
reject(new Error('Operation failed')); // 将Promise状态改为rejected,并传递错误原因
}
});
}
const promise = performAsyncTask();
promise
.then(result => {
console.log(result); // 输出: Operation succeeded
})
.catch(error => {
console.error(error); // 输出: Error: Operation failed
});
在上述示例中,我们定义了一个performAsyncTask
函数,它返回一个Promise对象,并在其内部根据随机生成的结果决定是调用resolve函数还是reject函数。我们创建了一个Promise对象,并通过then和catch方法注册了相应的回调函数,以处理Promise对象的结果或错误。
当Promise对象状态为fulfilled时,then方法注册的回调函数会被执行并接收结果值作为参数;当Promise对象状态为rejected时,catch方法注册的回调函数会被执行并接收错误原因作为参数。