es6中promise对象的状态是什么

发布时间:2022-04-01 10:19:10 作者:iii
来源:亿速云 阅读:523

ES6中Promise对象的状态是什么

在ES6中,Promise对象是用于处理异步操作的一种机制。它代表了一个异步操作的最终完成(或失败)及其结果值。Promise对象有三种状态:pending(等待中)fulfilled(已成功)rejected(已失败)。理解这些状态对于正确使用Promise至关重要。

1. Pending(等待中)

Promise对象的初始状态是pending。在这个状态下,Promise表示异步操作尚未完成,仍在进行中。此时,Promise既没有被resolve(解决),也没有被reject(拒绝)。

const promise = new Promise((resolve, reject) => {
  // 异步操作
  setTimeout(() => {
    resolve('操作成功');
  }, 1000);
});

console.log(promise); // Promise { <pending> }

在上面的例子中,promise对象在创建时处于pending状态,直到setTimeout回调函数执行并调用resolve方法。

2. Fulfilled(已成功)

Promise对象的异步操作成功完成时,它会从pending状态转变为fulfilled状态。此时,Promise对象会调用resolve方法,并将结果值传递给then方法的回调函数。

promise.then((result) => {
  console.log(result); // 操作成功
  console.log(promise); // Promise { '操作成功' }
});

在这个例子中,当setTimeout回调函数执行并调用resolve('操作成功')时,promise对象的状态变为fulfilled,并且then方法的回调函数被调用,输出操作成功

3. Rejected(已失败)

如果Promise对象的异步操作失败或出现错误,它会从pending状态转变为rejected状态。此时,Promise对象会调用reject方法,并将错误信息传递给catch方法的回调函数。

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject(new Error('操作失败'));
  }, 1000);
});

promise.catch((error) => {
  console.log(error.message); // 操作失败
  console.log(promise); // Promise { <rejected> Error: 操作失败 }
});

在这个例子中,当setTimeout回调函数执行并调用reject(new Error('操作失败'))时,promise对象的状态变为rejected,并且catch方法的回调函数被调用,输出操作失败

4. 状态不可逆

Promise对象的状态一旦从pending转变为fulfilledrejected,就不可再改变。这意味着一个Promise对象只能被resolvereject一次,之后的状态将保持不变。

const promise = new Promise((resolve, reject) => {
  resolve('第一次解决');
  reject(new Error('第二次拒绝')); // 这行代码不会生效
});

promise.then((result) => {
  console.log(result); // 第一次解决
}).catch((error) => {
  console.log(error.message); // 不会执行
});

在这个例子中,尽管在Promise构造函数中调用了reject,但由于resolve已经被调用,Promise对象的状态已经变为fulfilled,因此reject不会生效。

5. 总结

Promise对象的状态是理解和使用Promise的关键。Promise有三种状态:pendingfulfilledrejectedpending是初始状态,表示异步操作尚未完成;fulfilled表示操作成功完成;rejected表示操作失败。Promise对象的状态一旦改变,就不可逆转。通过正确处理这些状态,可以有效地管理异步操作,并编写出更加健壮和可维护的代码。

推荐阅读:
  1. 使用中promise对象的方法是什么
  2. es6中Promise 对象的功能有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

es6 promise

上一篇:es6箭头函数什么时候不能用

下一篇:node中的path模块和fs模块怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》