为什么promise的执行函数arg名为resolve()?

时间:2018-02-01 06:32:25

标签: javascript promise

在我读过的几乎所有文档中,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.mdhttps://promisesaplus.com/,“已解决”意味着承诺已进入最终状态(履行,拒绝或解决另一个承诺),“履行”意味着承诺具有承诺已成功解决。

但是,执行程序的resolve()函数用于强制承诺进入“已完成”状态。

所以我的问题是:为什么执行者的resolve()函数不是名为fulfill()的?我误解了什么吗?

1 个答案:

答案 0 :(得分:2)

这是一个可能的解释。

承诺最终会被履行或拒绝,并且可以通过履行价值或拒绝理由直接发送给其中一个州。

但是,承诺也可以与另一个承诺相关联,然后它将跟踪那个可靠的。如果那个最终完成,那么这个承诺就会实现。如果其他那个人最终被拒绝,那么这个承诺将被拒绝。

因此,对于执行者,您实际上可以做三件事:

  1. 实现一个值(不是那么可能)。
  2. 拒绝理由
  3. 解决一个将被追踪的人,并且他们的最终处置将由这个承诺继承。
  4. 啊,但你不需要三个功能来实现这一切。你可以用两个来做。 #1和#3可以使用相同的函数,只是改变传递给它的函数(可以是一个值或一个不可靠的值)。所以,你需要一个捕获#1和#3的动词。人们通常选择resolve作为动词。它被解析为值或者可以。

    所以,你得到new Promise(function(resolve, reject) {...});。你必须为第一个功能选择一些单词。大多数撰写文档的人选择resolve()。如果您决定使用不可用的价值,您将获得履行承诺。如果你决定成为一个卑鄙的人,那么这个承诺将跟踪那个可能的并承担它的最终状态。