es6 promise有哪些状态

发布时间:2022-05-20 16:01:33 作者:iii
来源:亿速云 阅读:300

ES6 Promise有哪些状态

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

1. Pending(进行中)

PendingPromise的初始状态。当一个Promise被创建时,它处于pending状态。这意味着异步操作尚未完成,Promise既没有被fulfilled,也没有被rejected

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

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

在上面的例子中,promise在创建后立即处于pending状态,直到setTimeout回调函数执行并调用resolve

2. Fulfilled(已成功)

Promise中的异步操作成功完成时,Promise会从pending状态转变为fulfilled状态。此时,Promise的结果值会被传递给then方法的回调函数。

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

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

在这个例子中,promise在1秒后变为fulfilled状态,并且then方法的回调函数被调用,输出操作成功

3. Rejected(已失败)

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

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

promise.catch((error) => {
  console.log(error.message); // 操作失败
});

在这个例子中,promise在1秒后变为rejected状态,并且catch方法的回调函数被调用,输出操作失败

4. 状态不可逆

Promise的状态一旦从pending转变为fulfilledrejected,就不可再改变。这意味着一个Promise只能被resolvereject一次,后续的resolvereject调用将被忽略。

const promise = new Promise((resolve, reject) => {
  resolve('第一次resolve');
  reject(new Error('第一次reject')); // 被忽略
  resolve('第二次resolve'); // 被忽略
});

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

在这个例子中,尽管reject和第二次resolve被调用,但它们都被忽略,只有第一次resolve生效。

5. 总结

Promise的三种状态pendingfulfilledrejected是理解和使用Promise的基础。pending表示异步操作尚未完成,fulfilled表示操作成功完成,rejected表示操作失败。Promise的状态一旦改变,就不可逆转。掌握这些状态及其转换规则,有助于更好地处理异步操作和错误处理。

通过合理使用Promise,可以有效地管理复杂的异步代码,避免回调地狱(Callback Hell),并提高代码的可读性和可维护性。

推荐阅读:
  1. es6学习笔记
  2. 如何在ES6中使用Promise对象

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

promise es6

上一篇:怎么用python的requests读取服务器响应

下一篇:python希尔排序方法怎么用

相关阅读

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

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