阅读 375

Promise的三种状态

Promise对象,可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数,但Promise对象的状态不受外界影响,Promise对象代表一个异步操作,有三种状态:

  • pending(进行中)

  • fulfilled(已成功)

  • rejected(已失败)

只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态,这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

promise的状态一旦改变,就无法再次改变,其不可逆

任何时候都可以得到这个结果,Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected,只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型),如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果,这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

我们来看一下下面这个例子:

setTimeout(()=>{console.log(111)},0)
let m = new Promise((resolve,reject)=>{
  console.log(222);
  resolve();
  console.log(333);
  reject();
  console.log(444);
})
m.then(()=>{
  console.log(555);
}).catch(()=>{
  console.log(666);
})

执行之后我们会发现输出结果为:222 333 444 555 111
666没有输出,原因就是resolve一旦执行,promise的状态就不会再改变了。但是其后续的代码依然会继续执行。

来源 https://www.oecom.cn/promise-status/

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐