期约【Promise】相关的术语

摘自《JavaScript权威指南》P314页

如果不是讨论编程,而是讨论人类的承诺,我们会说承诺得到“信守”或者“背弃”。而在讨论JavaScript期约时,对应的术语是得到“兑现”(fullfill)和被“拒绝”(reject)。想象一下,调用一个期约的then()方法时传入了两个回调函数。如果第一个回调被调用,我们说期约得到兑现,而如果第二个回调被调用,我们说期约被拒绝。如果期约既未兑现,又未被拒绝,那它就是待定(pending)。而期约一旦兑现或被拒绝,我们说它已经落定(settle),永远不会再从兑现变成拒绝,反之亦然。

“期约是一个对象,表示异步操作的结果。”关键是要记住期约不仅是在某些异步代码完成时注册回调的抽象方式,它还表示该异步代码的结果。如果异步代码正常结束(期约兑现),那这个结果基本上就是代码的返回值。如果异步代码没有正常结束(期约被拒绝),那这个结果就是一个Error对象或者某个其他值(如果非异步代码抛出了异常)。任何已经落定的期约都有一个与之关联的值,而这个值不会再改变。如果期约兑现,那这个值会传给作为then()的第一个参数注册的回调函数。如果期约被拒绝,那这个值是一个错误,会传给使用catch()驻车的或作为then()的第二个参数注册的回调函数。

之所以要准确定义期约的相关术语,是因为期约也可能被解决(reslove)。这个解决状态很容易与兑现状态或落定状态混淆,但严格来讲它们并不是一回事。

你可能感兴趣的:(JavaScript,Promise)