问题标签 [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 回答
1531 浏览

javascript - 在 JavaScript / node.js 中使用 A+ 承诺的 While 循环

我需要继续调用远程 API,直到我得到我需要的响应,并且我想使用 node.js 中的官方 A+ 承诺。同步伪代码:

我正在使用request-promise库来处理请求,所以结果可能是这样的:

PS 这与https://stackoverflow.com/a/17238793/177275非常相似,但我想要一个非基于 q 的实现。

0 投票
1 回答
3282 浏览

node.js - 如何使用 node.js 中的本机承诺全局处理异常?

我知道如何处理 Promise 中的特定错误,但有时我的代码如下所示:

有时,我会得到无效的 JSON,这会在JSON.parse throws. 一般来说,我必须记住为.catch我的代码中的每一个承诺添加一个处理程序,当我不这样做时,我无法找出我忘记的地方。

如何在我的代码中找到这些被抑制的错误?

0 投票
0 回答
125 浏览

javascript - 如何在客户端添加对 ECMA Script 6 承诺的支持?

我需要在客户端的 Web 应用程序中支持 ECMA 脚本 6 承诺。我正在使用 Spotify Web API,它看起来像这样

我知道我可以将这些转换为回调以实现向后兼容性,但这会做很多工作,而且代码看起来也不那么干净。

0 投票
3 回答
2056 浏览

javascript - ES6 Promises in Mocha

I'm using this polyfill for ES6 promises and Mocha / Chai.

My assertions for the promises are not working. The following is a sample test:

When I run this test it fails due to timeout. The assertion failure that was thrown in the then block is caught in the catch block. How can I avoid this and just throw it straight to Mocha?

I could just throw it from the catch function, but then how would I make assertions for the catch block?

0 投票
4 回答
853 浏览

callback - 外来控制流的 ES6 Promise 模式

ES6 Promise 很棒。到目前为止,从回调习语调整我的想法很容易。我发现它自然会鼓励更多的模块化代码,当然错误处理也更加清晰。

但是有几次我遇到了似乎(?)无法从 nodebacks 轻松转换为 promises 的流程情况(也许就是这样,但也许我只是对答案视而不见)。由于 Promises 对下一个操作(或者即使有一个操作)是不可知的,所以将 Promises 与不仅接受回调而且还返回它们的 API 一起使用似乎非常困难。

想到的最常见的例子是“完成”回调。它出现在诸如数据库连接之类的东西中,表示“将连接返回到池”,但我也看到它在许多其他地方也出现了。

像这样的流反转显然不是您希望在 API 中开始使用的东西,但它就在那里,有时您无法真正避免它。使用回调,您可以将“稍后调用”内部回调传递给原始“外部”回调。它并不能完全分离关注点,但至少它是快速和简单的。

是否有适合这种情况的基于 Promise 的方法?一种说法,'这是解决值 - 但是当链完成时,也这样做'?我怀疑没有什么与我刚才描述的完全匹配,因为实际上不可能说一个链条已经“完成”,但也许我错过了一些让你接近它而不造成混乱的模式......


编辑:根据到目前为止的反馈,我意识到根本没有办法将这样的 API 包装在真正的 Promise 中,因为您返回的 Promise 将永远无法告诉您任何有关任何后续链式 Promise 的信息。但你可以伪造它。扭曲的是结果相当脆弱。它必须假定唯一then需要连接对象的是紧随其后的那个。承诺的消费者需要了解它是一次性使用的连接,否则这并不明显。因此,我在实践中并不真正推荐它,但为了好奇,这里有一个解决方案,它隐藏了done作为(并最终成为)承诺链的同时:

控制台打印:

  • 收到连接。
  • 使用连接完成!
  • 完成被称为。
  • 这应该是在连接关闭之后。
0 投票
3 回答
716 浏览

node.js - NodeJs,如何将数据从co返回到外部对象

需要帮忙!我怎样才能获得表格 co 之外的数据?我不想在 .then() 中处理它们。

我有一些这样的代码(ES6):

现在我不想处理 .then() 中的数据,我只想取出值。但如果我这样做:

我得到的是一个承诺对象......

那么,我应该如何获取 json 数据呢?谢谢。

0 投票
3 回答
37885 浏览

javascript - 为什么javascript ES6 Promises在解析后继续执行?

据我了解,promise 是可以 resolve() 或 reject() 的东西,但我惊讶地发现 promise 中的代码在调用 resolve 或 reject 后继续执行。

我认为 resolve 或 reject 是 exit 或 return 的异步友好版本,它将停止所有立即执行的函数。

有人可以解释为什么以下示例有时会在解析调用后显示 console.log 背后的想法:

jsbin

0 投票
7 回答
60482 浏览

javascript - javascript中的双括号是什么意思以及如何访问它们

情况

我有以下使用Promise的功能。

的内容definitions是:

直接访问PromiseValue属性返回undefined

问题

双括号是什么[[ ]]意思,以及如何检索[[PromiseValue]].

0 投票
1 回答
2431 浏览

javascript - 如何在原生 javascript Promise 中包装 jsonP 回调?

我正在使用本机 Promise 将一堆 XmlHttpRequests 组合成一个结果,我认为我得到了它的工作,请参阅http://jsfiddle.net/pjs06hdo/ (对 flickr api 的随机调用,请参阅控制台以了解实际情况按什么顺序)

可能会有更短的实现,但是通过这段代码,我可以理解发生了什么。

但随后出现了愚蠢的 JSONP :-( 事实证明,实际的目标站点不允许跨站点请求,我必须使用提供的 jsonP 端点(再次用 flickr 模拟)我被困在这里:那个愚蠢的全球回调不符合我的基本理解Promise

我认为解决方案与如何将现有回调 API 转换为承诺?.

我试图实现这一点,但它只能部分工作:http: //jsfiddle.net/b33bj9k1/没有实际输出,只有控制台消息,抱歉。但是在那里你可以看到有 3 个调用来创建 Promise,但是resolve(),jsonFlickrApiAsync()只被调用一次。

使用 Promise 处理 jsonP 回调的正确方法是什么,这样我就可以Promise.all()像上面的 XmlHttpRequest 版本一样处理结果?

请不要使用 jQuery - 我想了解真正发生的事情

0 投票
0 回答
74 浏览

javascript - Promise.all.then 结果的顺序是否有保证?

假设这种情况:

假设 p1 和 p2 都已解析,假设 v[0] 将包含 p1 的结果并且 v[1] 将包含 p2 的结果是否安全?还是我只能假设 v 将包含每个承诺的 2 个值并且不能假设每个值在哪里?