问题标签 [es6-promise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如何使用 Mocha 测试 Promise
我正在使用 Mocha 来测试一个返回承诺的异步函数。
测试承诺解析为正确值的最佳方法是什么?
javascript - 如何确定浏览器是否支持 Promise
有谁知道,使用 Modernizr 或其他方式,是否有办法检测浏览器中是否启用了 Promise 功能?
我有一个用于该功能的 polyfill,但只想在浏览器没有本机实现的情况下应用它。
jquery - jQuery $.Deferred (jQuery 1.x/2.x) 固有的问题
@Domenic 有一篇关于 jQuery 延迟对象的失败的非常详尽的文章:你错过了承诺点。在其中 Domenic 强调了 jQuery 承诺与其他承诺相比的一些失败,包括Q、when.js、RSVP.js 和 ES6 承诺。
我从 Domenic 的文章中走开,感觉 jQuery 承诺在概念上存在固有的缺陷。我试图为这个概念举例。
我认为 jQuery 实现有两个问题:
1..then
方法不可链接
换句话说
jQuery 将a
在b
满足时调用promise
。
由于.then
在其他 Promise 库中返回一个新的 Promise,它们的等价物是:
2.异常处理在jQuery中冒泡。
另一个问题似乎是异常处理,即:
Q 中的等价物是:
a
在 jQuery 中,当catch 块失败时会抛出异常并冒泡。在其他承诺中,任何异常a
都将传递给.done
or.catch
或其他异步捕获。如果没有任何 Promise API 调用捕获到异常,它就会消失(因此 Q 的最佳实践是,例如使用.done
释放任何未处理的异常)。
上面的问题是否涵盖了与 jQuery 实现承诺的问题,还是我误解或遗漏了问题?
编辑 这个问题与 jQuery < 3.0; 从jQuery 3.0 alpha开始, jQuery 是 Promises/A+ 兼容的。
javascript - 什么是明确的承诺构造反模式,我该如何避免它?
我正在编写代码,它看起来像:
有人告诉我这分别称为“延迟反模式”或“Promise
构造函数反模式”,这段代码有什么不好的,为什么这叫做反模式?
promise - JS fiddle中的JavaScript Promises示例不起作用
我已经为 JSFiddle 上的基本 JavaScript Promises 示例尝试了以下示例脚本http://jsfiddle.net/QDLup/
但它似乎不起作用。有没有人尝试在 JS fiddle 上编写一个示例脚本(A+ 投诉)?目前有 chrome 35 和 Firefox 30 根据 caniuse http://caniuse.com/promises支持它
javascript - 如何获取在一系列 Promise 中成功的第一个 Promise 的值
我正在寻找一种仅在另一个承诺失败时才返回承诺的方法。
我怎样才能做到这一点?
我的承诺看起来像这样(当然我已经删除了不相关的代码):
我想按以下顺序组合它们
- 呼叫
getUserByUsername
,如果拒绝则呼叫getUserByEmail
- 返回从上述两个承诺中解决的人的值,或者如果两个承诺都失败则拒绝整个链。
- 使用该值调用
checkPassword
,如果它拒绝,则拒绝整个链
到目前为止,我已经做到了这一点,它似乎工作。(我正在使用when.js顺便说一句)
所以这段代码有效,但我很确定应该有更优雅的方式来做到这一点(我认为我的代码看起来更像是一个 hack)。
javascript - ECMAScript Promise.all 方法适用于 jQuery.Deferred。为什么?
我正在研究 JavaScript 中的 Promises。我很有趣我可以将 ECMAScript Promises 与其他实现结合起来,例如 jQuery $.Deferred
。Promises.all
当与 jQuery 一起正常工作时,我感到很惊讶$.Deferred
。我试图在 jQuery 源代码和 CommonJS Promises/A 规范中找到答案,但我仍然误解了为什么这段代码按我的预期工作(console.log
在 10 秒后,而不是 5 秒后):
你有什么想法?
Promise.all
必须依靠某些领域或方法$.Deferred
来理解它是否解决。那个方法/字段是什么?
javascript - 如何使用 Jasmine 2.0 测试 ES6 Promise?
我有一个函数返回一个(可能已填充) ES6 承诺,我想编写一个 Jasmine 测试来检查它是否成功解析并且解析的值是否正确。我该怎么做?
这是我目前找到的方式,但至少很无聊:
还有一个名为jasmine-as-promised的库,看起来很有帮助,但遗憾的是它在 Jasmine 2.0 中不起作用,因为它使用runs()
的已被删除。
是否已经为测试 Jasmine 2.0 中的 Promise 开发了任何舒适的解决方案?
javascript - 在jquery mobile中导航时等待页面加载
我有一个使用 jQuery Mobile 构建的单页 Web 应用程序。在用户完成某个操作后,我想以编程方式将他们带回菜单页面,这涉及到返回历史,然后对菜单页面的元素执行一些操作。
简单地做
不起作用,因为返回动作是异步的,即我需要一种在调用之前等待页面加载的方法doSomethingWith()
。
我最终使用了 window.setTimeout(),但我想知道在 jQM 中是否没有更简单的方法(不同的模式?)。另一种选择是监听页面加载事件,但从代码组织的角度来看,我发现它更糟。
(编辑:原来移动 Safari 不支持原生 js 承诺;需要由第 3 方库替换)
可以这样使用:
在这里而不是在代码审查中发布它,因为问题是关于在 jQM/js 中执行此操作的替代方法,而不是代码本身的性能/安全性。
jquery - 基于 jQuery Deferred 的 ES6 Promise polyfill
我最近下载了一个使用 ES6 Promises 的库。由于我想部署到不支持 Promises 的浏览器,我还下载了一个polyfill。
因为无论如何我都包含了 jQuery,所以我考虑为 Promise 编写一个 polyfill,它在内部使用 jQuery 的 Deferred。
我编写了这个简单的 polyfill,足以满足我的特定用例:
问题在于它没有涵盖整个规范(认为Promise.all()
缺少)。
在我投入大量时间之前,我想知道是否可以使用 jQuery 的 Deferred 为 Promise 编写完整的 polyfill。还是有一些无法复制的功能?