javascript - JavaScript 中的 Deferred、Promise 和 Future 有什么区别?

标签 javascript promise future deferred

Deferreds、Promise 和 Futures 之间有什么区别?
这三个背后是否有普遍认可的理论?

最佳答案

这些答案,包括选择的答案,对于引入 Promise 很有用 从概念上讲,但缺乏具体的差异是什么 使用实现它们的库时出现的术语(以及 重要的区别)。

因为还是an evolving spec ,目前的答案来自尝试调查引用(如 wikipedia )和实现(如 jQuery ):

  • 延迟:从未在流行的引用文献中描述过, <支持> 1 2 3 4 但通常被实现用作 promise 解析的仲裁者(实现 resolvereject)。 <支持> 5 6 7

    有时延迟也是 promise (实现then), <支持> 5 6 其他时候,只有 Deferred 被认为更纯粹 能够解决,并强制用户访问 promise 使用 然后。 <支持> 7

  • promise :对于正在讨论的战略而言,最包罗万象的词。

    存储目标函数结果的代理对象 我们想要抽象的同步性,加上暴露一个 then 函数 接受另一个目标函数并返回一个新的 promise 。 <支持> 2

    示例来自 CommonJS :

    > asyncComputeTheAnswerToEverything()
        .then(addTwo)
        .then(printResult);
    44
    

     

    总是在流行的引用资料中有所描述,尽管从未具体说明 谁的责任决议落到谁的身上。 <支持> 1 2 3 4

    总是出现在流行的实现中,并且从不给出 分辨率能力。 <支持> 5 6 7

  • future :在一些流行的引用资料中发现的一个看似已弃用的术语 <支持> 1 以及至少一种流行的实现, <支持> 8 但似乎正在逐步退出讨论以优先使用该术语 ' promise ' <支持> 3 并且并不总是在该主题的流行介绍中提及。 <支持> 9

    但是,至少有一个库通常使用该术语来抽象 同步性和错误处理,同时不提供 then 功能。 <支持> 10 目前尚不清楚是否有意避免使用“ promise ”一词,但可能是 不错的选择,因为 promise 是围绕“thenables”构建的。 <支持> 2

引用文献

  1. Wikipedia on Promises & Futures
  2. Promises/A+ spec
  3. DOM Standard on Promises
  4. DOM Standard Promises Spec WIP
  5. DOJO Toolkit Deferreds
  6. jQuery Deferreds
  7. Q
  8. FutureJS
  9. Functional Javascript section on Promises
  10. Futures in AngularJS Integration Testing

其他可能令人困惑的事情

关于javascript - JavaScript 中的 Deferred、Promise 和 Future 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801283/

相关文章:

async-await - 在 Flutter 中使用 Future 在异步任务中使用进度条对话框

rust - 如何向 tokio-io 添加特殊的 NotReady 逻辑?

multithreading - 如何在单个线程中执行一些Clojure future ?

javascript - 制表符 - 基于另一个制表符的过滤

javascript - RxJS retry() 语义

javascript - 如何在 GAS 功能真正结束后运行功能?

javascript - axios 调用不返回 promise

java-8 - Vertx 3 支持 CompletableFuture 吗?

JavaScript 测验类型错误 : Cannot read property '0' of undefined

javascript - Azure 视频插件分享视频