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

2024-02-24

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


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

既然还是不断发展的规范 http://dom.spec.whatwg.org/#open-issues,目前的答案来自于尝试调查这两个参考文献(例如维基百科 http://en.wikipedia.org/wiki/Futures_and_promises)和实现(如jQuery http://api.jquery.com/category/deferred-object/):

  • Deferred: Never described in popular references, 1 http://en.wikipedia.org/wiki/Futures_and_promises 2 https://github.com/promises-aplus/promises-spec 3 http://dom.spec.whatwg.org/#promises 4 https://github.com/domenic/promises-unwrapping/blob/master/README.md but commonly used by implementations as the arbiter of promise resolution (implementing resolve and reject). 5 http://dojotoolkit.org/reference-guide/1.9/dojo/Deferred.html 6 http://api.jquery.com/category/deferred-object/ 7 https://github.com/kriskowal/q

    Sometimes deferreds are also promises (implementing then), 5 http://dojotoolkit.org/reference-guide/1.9/dojo/Deferred.html 6 http://api.jquery.com/category/deferred-object/ other times it's seen as more pure to have the Deferred only capable of resolution, and forcing the user to access the promise for using then. 7 https://github.com/kriskowal/q

  • Promise:对正在讨论的战略最包罗万象的词。

    A proxy object storing the result of a target function whose synchronicity we would like to abstract, plus exposing a then function accepting another target function and returning a new promise. 2 https://github.com/promises-aplus/promises-spec

    示例来自CommonJS http://wiki.commonjs.org/wiki/Promises/A:

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

     

    Always described in popular references, although never specified as to whose responsibility resolution falls to. 1 http://en.wikipedia.org/wiki/Futures_and_promises 2 https://github.com/promises-aplus/promises-spec 3 http://dom.spec.whatwg.org/#promises 4 https://github.com/domenic/promises-unwrapping/blob/master/README.md

    Always present in popular implementations, and never given resolution abilites. 5 http://dojotoolkit.org/reference-guide/1.9/dojo/Deferred.html 6 http://api.jquery.com/category/deferred-object/ 7 https://github.com/kriskowal/q

  • Future: a seemingly deprecated term found in some popular references 1 http://en.wikipedia.org/wiki/Futures_and_promises and at least one popular implementation, 8 https://github.com/FuturesJS/FuturesJS but seemingly being phased out of discussion in preference for the term 'promise' 3 http://dom.spec.whatwg.org/#promises and not always mentioned in popular introductions to the topic.

    However, at least one library uses the term generically for abstracting synchronicity and error handling, while not providing then functionality. 10 https://github.com/angular/angular.js/blob/master/src/ngScenario/Future.js It's unclear if avoiding the term 'promise' was intentional, but probably a good choice since promises are built around 'thenables.' 2 https://github.com/promises-aplus/promises-spec

参考

  1. 关于承诺和期货的维基百科 http://en.wikipedia.org/wiki/Futures_and_promises
  2. 承诺/A+ 规格 http://promisesaplus.com/
  3. Promise 的 DOM 标准 http://dom.spec.whatwg.org/#promises
  4. DOM 标准 Promise 规范 WIP https://github.com/domenic/promises-unwrapping/blob/master/README.md
  5. DOJO 工具包延期 http://dojotoolkit.org/reference-guide/1.9/dojo/Deferred.html
  6. jQuery 延迟 http://api.jquery.com/category/deferred-object/
  7. Q https://github.com/kriskowal/q
  8. FutureJS https://github.com/FuturesJS/FuturesJS
  9. AngularJS 集成测试的未来 https://github.com/angular/angular.js/blob/master/src/ngScenario/Future.js

其他可能令人困惑的事情

  • Promise/A 和 Promise/A+ 之间的区别 http://promisesaplus.com/differences-from-promises-a

    (TL;DR,Promises/A+ 主要解决 Promises/A 中的歧义)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的 Deferred、Promise 和 Future 有什么区别? 的相关文章

  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea

随机推荐

  • 更改 Kivy 中按钮的背景颜色

    我是 Kivy 的新手 在指定按钮的背景颜色时遇到困难 这是我的简单例子 custombutton py from kivy app import App from kivy uix widget import Widget class M
  • 获取 .Net 中 CryptoStream 的长度

    我正在开发加密 解密文件的软件 我希望能够猜测加密后数据的长度 但我无法使用 CryptoStream Length 它会抛出 NotSupportedException 有什么办法可以猜出来吗 我正在使用 RijndaelManaged
  • 带有尾部斜杠的奇怪 Nginx 行为

    我有一个非常有趣的行为 我想避免在我的网站上的 URL 中出现尾随斜杠 我已经把rewrite 1 permanent 规则进入我的服务器块 所以 https example com something https example com
  • C# 命名管道流 readline 挂起

    我很困惑 我有命名管道的客户端 服务器结构 问题出在某个随机点 经过一段时间的工作后 它只是挂在streamReader ReadLine 上 它只是停下来 不再继续 我很困惑 我根本不知道发生了什么 也不知道如何调试它 为什么以及何时发生
  • 使用VBA将字符串分成Excel中的不同单元格

    例如 我有一个名为 str 的字符串变量 该 str 的值为 apple orange pineapple 每个单词由一个新的 VbLine 分隔 我想把它移到细胞上 A1 包含apple A2 包含orange并且A3包含pineappl
  • asp.net mvc Html.ActionLink() 保留我不想要的路由值

    我认为有以下 ActionLink 它创建以下 URLhttp mywebsite com Controller Action http mywebsite com Controller Action 假设我在末尾添加一个 ID 如下所示
  • 安全地发布网站构建后的最佳方法是什么?

    那么 根据您的经验 最好的方法是什么 是否有一种安全的方法可以在构建自动化工具中编写脚本 触发 编辑 我应该提到这是 windows net 我将部署到 iis6 对于我使用的一些项目卡皮斯特拉诺 http www capify org 推
  • iPhone SDK:自定义视频播放器控件

    在我的 iPhone 应用程序中 我设计了一个自定义视频播放器 目前它非常基本 只有一个播放暂停和停止按钮 但我希望用户能够像使用苹果原始媒体播放器一样擦除视频 我认为这是正确的词 例如 如果您明白我的意思 我希望能够使用 UISlider
  • 删除数据框中不常见的行

    假设我有一个非常简单的数据框 a lt rep 5 30 b lt rep 4 80 d lt rep 7 55 df lt data frame Column c a b d 最会是什么generic删除所有出现次数少于 60 次的行的方
  • 如何在 Qt 中的小部件下绘制阴影?

    我想知道如何在 Qt 中的小部件 不是主小部件 例如标签 下绘制阴影 我需要使用样式表还是需要对其进行编码 用 C 假设您有一个表单和一个标签 想要从中投射阴影 您可以使用QGraphics 阴影效果 http qt project org
  • 在 LINQ 2 SQL 中不先选择数据就进行更新?

    如何在不先在 LINQ 中选择数据的情况下更新记录 由于您必须首先执行 linq select 显然会调用成本高昂的 SQL SELECT 因此更改所需的属性 然后执行 SubmitChanges 我希望避免这种情况 只执行 SQL UPD
  • Hibernate 全局“动态插入”

    有没有办法设置dynamic insertHibernate 全局属性 因此它将是所有实体的默认值 在 NHibernate 中是 foreach var clazz in config ClassMappings clazz Dynami
  • 在 WSL2 上运行的 Jupyter 实验室网络错误

    我在 WSL2 Ubuntu 上运行 Jupyter Lab 并在 Win10 PC 上的 Firefox 中访问它 它们在同一台机器上运行 因此不应该涉及 网络 我正在运行它jupyter lab no browser 服务器在终端中启动
  • 传递函数作为参数?

    这是我的事件 正如您所看到的 我想发送一个以它作为参数的函数 onclick deleteItems image size function GetImageSize 删除函数在js文件中 在我的 js 文件中 我想调用 GetImageS
  • 各组最新值的总和

    对于我的每一行数据 我想计算最近的总和value对于每个group dt data table group c a b a a b a value c 10 5 20 15 15 10 desired c 10 15 25 20 30 25
  • >>'运算符[重复]' aria-label='Java中无符号右移'>>>'运算符[重复]'> Java中无符号右移'>>>'运算符[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 1 gt gt gt 32 1 https stackoverflow com questions 4813909 why is 1 32 1 无符号右移运算符在最左边插入 0 所以当我这样做
  • Android 中的后台服务被杀死

    我们开发了一个 Android 应用程序 其中涉及后台服务 为了实现这个后台服务 我们使用了IntentService 我们希望应用程序每隔一段时间轮询一次服务器60 seconds 所以在IntentService 在 while 循环中
  • 你能为Python中导入的模块定义别名吗?

    在Python中 是否可以为导入的模块定义别名 例如 import a ridiculously long module name 所以它有一个别名 short name import a ridiculously long module
  • JVM 标志 -XX:+UseDynamicNumberOfGCThreads -XX:+TraceDynamicGCThreads 已启用,看不到。 GC 期间的 GC 线程数。请解释一下输出日志?

    我们有一个以集群模式 6 个节点 运行 Wildfly 应用服务器的应用程序 当触发 GC 时 我们有时会看到 JVM 冻结 16 秒 应用程序对时间敏感 如果 15 秒内没有收到心跳响应 集群中的其他节点会认为该节点已死亡 其中 JVM
  • JavaScript 中的 Deferred、Promise 和 Future 有什么区别?

    延期 承诺和期货之间有什么区别 这三个背后是否有一个普遍认可的理论 这些答案 包括选定的答案 有利于引入承诺 从概念上讲 但缺乏具体差异的具体内容 使用库实现它们时出现的术语 并且有are重要区别 既然还是不断发展的规范 http dom