在我读过的几乎所有文档中,promises都是用一个执行函数构造的,它的第一个参数是一个名为“resolve”的函数:
var promise1 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
但对我而言,这非常令人困惑,因为承诺术语将“已解决”与“已实现”区分开来,并且在执行函数命名中并未始终如一地区分这种区别。
根据https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md和https://promisesaplus.com/,“已解决”意味着承诺已进入最终状态(履行,拒绝或解决另一个承诺),“履行”意味着承诺具有承诺已成功解决。
但是,执行程序的resolve()函数用于强制承诺进入“已完成”状态。
所以我的问题是:为什么执行者的resolve()函数不是名为fulfill()的?我误解了什么吗?
答案 0 :(得分:2)
这是一个可能的解释。
承诺最终会被履行或拒绝,并且可以通过履行价值或拒绝理由直接发送给其中一个州。
但是,承诺也可以与另一个承诺相关联,然后它将跟踪那个可靠的。如果那个最终完成,那么这个承诺就会实现。如果其他那个人最终被拒绝,那么这个承诺将被拒绝。
因此,对于执行者,您实际上可以做三件事:
啊,但你不需要三个功能来实现这一切。你可以用两个来做。 #1和#3可以使用相同的函数,只是改变传递给它的函数(可以是一个值或一个不可靠的值)。所以,你需要一个捕获#1和#3的动词。人们通常选择resolve
作为动词。它被解析为值或者可以。
所以,你得到new Promise(function(resolve, reject) {...});
。你必须为第一个功能选择一些单词。大多数撰写文档的人选择resolve()
。如果您决定使用不可用的价值,您将获得履行承诺。如果你决定成为一个卑鄙的人,那么这个承诺将跟踪那个可能的并承担它的最终状态。