状态和命运(翻译)

原文:States and Fates

概述和操作性定义

状态

Promise 有三种互斥的状态: fulfilled, rejected, pending

  • 当代码promise.then(f) 能够立即调用f 时,这个promise就处在fulfilled状态。
  • 当代码promise.then(undefined, r)能够立即调用r时,这个promise就处在rejected状态。
  • 当promise不处在以上两个状态时它就是在pending状态。

当一个promise不是处在pending状态时,我们称它为 稳定的 。例如处在fulfilled或者rejected状态。稳定的不是一种状态,只是为了语言表述上的便利。

命运

Promise有两个互斥的命运:已解决(resolved)和未解决(unresolved)

  • 当试图解决或者拒绝一个promise对它本身没有影响的时候,它就是已解决的。例如一个promise被锁定为等待另一个promise或者它已经处于fulfilled/rejected状态。
  • 如果promise不是已解决那它就是未解决。例如:试图解决或者拒绝一个promise会对它产生影响。

一个promise可以“被解决为”另一个promise或者类promise的对象,这种情况下它会保存这个新的promise或者类promise对象以供将来打开。promise也可以“被解决为”一个非promise的值,然后带着这个值转化为fulfilled状态。

关联状态和命运

已解决的promise可以处在任意一种状态:

  • fulfilled:一个promise被解决为一个非promise值,这个promise就变成了fulfilled 状态;它被解决为一个会立即调用传递过来的 fulfillment 处理函数的类promise对象,这个promise也就是fulfilled状态了;它被解决为另一个处在fulfilled状态的promise,这个promise也就是fulfilled状态了。
  • rejected: 一个promise直接被拒绝或者被解决为另一个处在rejected状态的promise,这个promise就是rejected状态;一个promise被解决为一个会立即调用传递过来的rejection处理函数的类promise对象,它也是在rejected状态。
  • Pending:一个promise被解决为另一个处在pending状态的promise,它就是pending状态;一个promise被解决为一个可能调用任意函数的类promise对象,它也是在pending状态。

命运是unresolved的promise必然处于pending状态。

注意:他们之间的关系是可循环的。例如一个promise对象A被解决为类promise对象B,如果B会以一个处于rejected状态的promiseC为参数调用B的fulfillment处理函数,那么A就是rejected状态。

你可能感兴趣的:(状态和命运(翻译))