Deferreds、Promise 和 Futures 之间有什么区别?
这三个背后是否有普遍认可的理论?
最佳答案
这些答案,包括选择的答案,对于引入 Promise 很有用 从概念上讲,但缺乏具体的差异是什么 使用实现它们的库时出现的术语(以及 是重要的区别)。
因为还是an evolving spec ,目前的答案来自尝试调查引用(如 wikipedia )和实现(如 jQuery ):
延迟:从未在流行的引用文献中描述过, <支持> 1 2 3 4 但通常被实现用作 promise 解析的仲裁者(实现
resolve
和reject
)。 <支持> 5 6 7有时延迟也是 promise (实现
then
), <支持> 5 6 其他时候,只有 Deferred 被认为更纯粹 能够解决,并强制用户访问 promise 使用然后
。 <支持> 7promise :对于正在讨论的战略而言,最包罗万象的词。
存储目标函数结果的代理对象 我们想要抽象的同步性,加上暴露一个
then
函数 接受另一个目标函数并返回一个新的 promise 。 <支持> 2示例来自 CommonJS :
> asyncComputeTheAnswerToEverything() .then(addTwo) .then(printResult); 44
future :在一些流行的引用资料中发现的一个看似已弃用的术语 <支持> 1 以及至少一种流行的实现, <支持> 8 但似乎正在逐步退出讨论以优先使用该术语 ' promise ' <支持> 3 并且并不总是在该主题的流行介绍中提及。 <支持> 9
但是,至少有一个库通常使用该术语来抽象 同步性和错误处理,同时不提供
then
功能。 <支持> 10 目前尚不清楚是否有意避免使用“ promise ”一词,但可能是 不错的选择,因为 promise 是围绕“thenables”构建的。 <支持> 2
引用文献
- Wikipedia on Promises & Futures
- Promises/A+ spec
- DOM Standard on Promises
- DOM Standard Promises Spec WIP
- DOJO Toolkit Deferreds
- jQuery Deferreds
- Q
- FutureJS
- Functional Javascript section on Promises
- Futures in AngularJS Integration Testing
其他可能令人困惑的事情
Difference between Promises/A and Promises/A+
(TL;DR,Promises/A+ 主要解决 Promises/A 中的歧义)
关于javascript - JavaScript 中的 Deferred、Promise 和 Future 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801283/