问题标签 [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.

0 投票
2 回答
5400 浏览

javascript - 如何使用 Mocha 测试 Promise

我正在使用 Mocha 来测试一个返回承诺的异步函数。

测试承诺解析为正确值的最佳方法是什么?

0 投票
4 回答
25304 浏览

javascript - 如何确定浏览器是否支持 Promise

有谁知道,使用 Modernizr 或其他方式,是否有办法检测浏览器中是否启用了 Promise 功能?

我有一个用于该功能的 polyfill,但只想在浏览器没有本机实现的情况下应用它。

0 投票
1 回答
15269 浏览

jquery - jQuery $.Deferred (jQuery 1.x/2.x) 固有的问题

@Domenic 有一篇关于 jQuery 延迟对象的失败的非常详尽的文章:你错过了承诺点。在其中 Domenic 强调了 jQuery 承诺与其他承诺相比的一些失败,包括Q、when.js、RSVP.js 和 ES6 承诺。

我从 Domenic 的文章中走开,感觉 jQuery 承诺在概念上存在固有的缺陷。我试图为这个概念举例。

我认为 jQuery 实现有两个问题:

1..then方法不可链接

换句话说

jQuery 将ab满足时调用promise

由于.then在其他 Promise 库中返回一个新的 Promise,它们的等价物是:

2.异常处理在jQuery中冒泡。

另一个问题似乎是异常处理,即:

Q 中的等价物是:

a在 jQuery 中,当catch 块失败时会抛出异常并冒泡。在其他承诺中,任何异常a都将传递给.doneor.catch或其他异步捕获。如果没有任何 Promise API 调用捕获到异常,它就会消失(因此 Q 的最佳实践是,例如使用.done释放任何未处理的异常)。

 

上面的问题是否涵盖了与 jQuery 实现承诺的问题,还是我误解或遗漏了问题?


编辑 这个问题与 jQuery < 3.0; 从jQuery 3.0 alpha开始, jQuery 是 Promises/A+ 兼容的。

0 投票
3 回答
106592 浏览

javascript - 什么是明确的承诺构造反模式,我该如何避免它?

我正在编写代码,它看起来像:

有人告诉我这分别称为“延迟反模式”或“Promise构造函数反模式”,这段代码有什么不好的,为什么这叫做反模式

0 投票
1 回答
1695 浏览

promise - JS fiddle中的JavaScript Promises示例不起作用

我已经为 JSFiddle 上的基本 JavaScript Promises 示例尝试了以下示例脚本http://jsfiddle.net/QDLup/

但它似乎不起作用。有没有人尝试在 JS fiddle 上编写一个示例脚本(A+ 投诉)?目前有 chrome 35 和 Firefox 30 根据 caniuse http://caniuse.com/promises支持它

0 投票
1 回答
432 浏览

javascript - 如何获取在一系列 Promise 中成功的第一个 Promise 的值

我正在寻找一种仅在另一个承诺失败时才返回承诺的方法。

我怎样才能做到这一点?

我的承诺看起来像这样(当然我已经删除了不相关的代码):

我想按以下顺序组合它们

  1. 呼叫getUserByUsername,如果拒绝则呼叫getUserByEmail
  2. 返回从上述两个承诺中解决的人的值,或者如果两个承诺都失败则拒绝整个链。
  3. 使用该值调用checkPassword,如果它拒绝,则拒绝整个链

到目前为止,我已经做到了这一点,它似乎工作。(我正在使用when.js顺便说一句)

所以这段代码有效,但我很确定应该有更优雅的方式来做到这一点(我认为我的代码看起来更像是一个 hack)。

0 投票
1 回答
1646 浏览

javascript - ECMAScript Promise.all 方法适用于 jQuery.Deferred。为什么?

我正在研究 JavaScript 中的 Promises。我很有趣我可以将 ECMAScript Promises 与其他实现结合起来,例如 jQuery $.DeferredPromises.all当与 jQuery 一起正常工作时,我感到很惊讶$.Deferred。我试图在 jQuery 源代码和 CommonJS Promises/A 规范中找到答案,但我仍然误解了为什么这段代码按我的预期工作(console.log在 10 秒后,而不是 5 秒后):

你有什么想法?

Promise.all必须依靠某些领域或方法$.Deferred来理解它是否解决。那个方法/字段是什么?

0 投票
2 回答
4443 浏览

javascript - 如何使用 Jasmine 2.0 测试 ES6 Promise?

我有一个函数返回一个(可能已填充) ES6 承诺,我想编写一个 Jasmine 测试来检查它是否成功解析并且解析的值是否正确。我该怎么做?

这是我目前找到的方式,但至少很无聊:

还有一个名为jasmine-as-promised的库,看起来很有帮助,但遗憾的是它在 Jasmine 2.0 中不起作用,因为它使用runs()的已被删除。

是否已经为测试 Jasmine 2.0 中的 Promise 开发了任何舒适的解决方案?

0 投票
1 回答
943 浏览

javascript - 在jquery mobile中导航时等待页面加载

我有一个使用 jQuery Mobile 构建的单页 Web 应用程序。在用户完成某个操作后,我想以编程方式将他们带回菜单页面,这涉及到返回历史,然后对菜单页面的元素执行一些操作。

简单地做

不起作用,因为返回动作是异步的,即我需要一种在调用之前等待页面加载的方法doSomethingWith()

我最终使用了 window.setTimeout(),但我想知道在 jQM 中是否没有更简单的方法(不同的模式?)。另一种选择是监听页面加载事件,但从代码组织的角度来看,我发现它更糟。

(编辑:原来移动 Safari 不支持原生 js 承诺;需要由第 3 方库替换)

可以这样使用:

在这里而不是在代码审查中发布它,因为问题是关于在 jQM/js 中执行此操作的替代方法,而不是代码本身的性能/安全性。

0 投票
1 回答
1919 浏览

jquery - 基于 jQuery Deferred 的 ES6 Promise polyfill

我最近下载了一个使用 ES6 Promises 的库。由于我想部署到不支持 Promises 的浏览器,我还下载了一个polyfill

因为无论如何我都包含了 jQuery,所以我考虑为 Promise 编写一个 polyfill,它在内部使用 jQuery 的 Deferred。

我编写了这个简单的 polyfill,足以满足我的特定用例:

问题在于它没有涵盖整个规范(认为Promise.all()缺少)。

在我投入大量时间之前,我想知道是否可以使用 jQuery 的 Deferred 为 Promise 编写完整的 polyfill。还是有一些无法复制的功能?