Promise如何修改对象的状态

2023-05-23 10:26:52 浏览数 (2)

在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方法注册的回调函数会被执行并接收错误原因作为参数。

0 人点赞