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

标签 javascript promise future deferred

延期、 promise 和 future 之间有什么区别?
这三个背后是否有一个普遍认可的理论?

最佳答案

这些答案,包括所选的答案,都有助于引入 promise 从概念上讲,但缺乏具体差异的具体内容 使用库实现它们时出现的术语(并且有 重要的区别)。

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

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

    有时延迟也是 promise (实现 then), 5 6 其他时候,仅使用 Deferred 被认为更纯粹 能够解决,并迫使用户访问 promise 使用then 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/35200079/

相关文章:

javascript - 在 Jscript 中为 Q.all() 构建动态函数数组

java - 打破 CompletableFuture 的流程

javascript - Three.js 当渲染器位于 div 而不是整个窗口时如何获取准确的世界坐标

javascript - Bluebird JS : Make a function run in parallel

multithreading - 在独立 Perl 脚本中使用 Mojo::Promise

java - 一旦我将 Runnable 传递给不同线程中的 Swing 的 invokeAndWait ,就无法停止它

java - 如何控制 okHttpClient 的连接大小?

javascript - 如何在 Sharrre 插件中隐藏总分享数?

javascript - 鼠标移动时放大图像 : reaching all corners

javascript - 条件在 eventListener 内不起作用