美文网首页
异步处理的通用模型

异步处理的通用模型

作者: bestCindy | 来源:发表于2020-08-09 12:46 被阅读0次

ES 官方参考了大量的异步场景,总结出一套异步通用模型,该模型,可以覆盖几乎所有的异步场景,甚至同步场景。

值得注意的是,为了兼容旧系统,ES6 并不打算抛弃掉过去的做法,只是基于该模型推出一个全新的 API,使用该 API,会让异步处理更加简洁优雅

理解该 API 最重要的,是理解它的异步模型

1、ES6 将某一件可能发生异步操作的事情,分为两个阶段:unsettledsettled

  • unsettled:未决阶段,表示事情还在进行前期的处理,并没有发生通向结果那件事
  • settled:已决阶段,事情已经有了一个结果,不管这个结果是好是坏,整件事情无法逆转

事情总是从 未决阶段 逐步发展到 已决阶段 的。并且,未决阶段拥有何时通向已决阶段的能力

2、ES6 将事情划分为三种状态:pending、resolved、rejected

  • pending:挂起,处于未决阶段,则表示这件事情还在挂起(最终结果还没出来)
  • resolved:已处理,已决阶段的一种状态,表示整件事已经出现结果,并是一个可以按照正常逻辑进行下去的结果
  • rejected:已拒绝,已决阶段的一种状态,表示整件事情已经出现结果,并是一个无法按照正常逻辑进行下去的结果,通常用于表示有一个错误

既然未决阶段有权利决定事情的走向,因此,未决阶段可以决定事情最终的状态!

我们将 把事情变为 resolve 的状态的过程叫做:resolved,推向该状态时,可能会传递一些数据

我们将 把事情变为 reject 状态的过程叫做:rejected,推向该状态时,同样可能会传递一些数据,通常为错误信息

始终记住,无论阶段,还是状态,是不可逆的!


当事情达到已决阶段后,通常需要进行后续处理,不同的已决状态,决定了不同的后续处理

  • resolved 状态:这是一个正常的已决状态,后续处理表示为 thenable
  • rejected 状态:这是一个非正常的已决状态,后续处理表示为 catchable

后续处理可能有多个,因此会形成作业队列,这些后续处理会按照顺序,当状态到达后依次执行


Promise

相关文章

网友评论

      本文标题:异步处理的通用模型

      本文链接:https://www.haomeiwen.com/subject/nbxkdktx.html