【发布时间】:2018-02-01 06:32:24
【问题描述】:
在我阅读的几乎所有文档中,promise 都是用一个执行器函数构造的,它的第一个参数是一个名为“resolve”的函数:
var promise1 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
但对我来说,这非常令人困惑,因为 Promise 术语将“已解决”与“已实现”区分开来,并且在 executor 函数命名中并没有始终如一地观察到这种区别。
根据https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md 和https://promisesaplus.com/,“已解决”意味着承诺已进入某种最终状态(履行、拒绝或解决为另一个承诺),“履行”意味着承诺已成功解决。
但是,执行器的 resolve() 函数用于强制承诺进入“已完成”状态。
所以我的问题是:为什么执行器的resolve() 函数不命名为fulfill()?我是不是误会了什么?
【问题讨论】:
-
您可以随意命名。这是您自己的参数声明。如果
fulfill对您来说听起来更好,那么请继续使用它。 -
有道理,谢谢。是否有我遗漏的原因可以解释为什么所有引用似乎都将其命名为解析,如果满足显然会是一个更准确和一致的名称?
-
那篇状态和命运文章与您的解释并不完全一致。它是这样说的:“它可以被解析为一个非承诺值,在这种情况下,它会用那个值来实现。”这是它使用
resolve作为动词,就像resolve()调用一样。我一直认为完成和解决术语是一团糟。大多数人谈到解决或拒绝承诺。无论最初设计者对“实现”的目标是什么,这个目标似乎都失败了,因为大众使用resolve和reject作为两个动词来改变承诺的状态。 -
明白了,promise 解析的递归性质解释了为什么 resolve() 不是 fully() 的同义词,为什么 resolve() 确实是更好的函数名称。谢谢!!
-
该文档谈到“解析为一个值”或“解析为一个 thenable”。我猜它只是
fulfilled如果它被解析为一个值并且解析回调可以做到。
标签: javascript promise