问题标签 [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 - 如何正确使用承诺返回 2 个不同的结果
我正在尝试使用 ES6 在 JavaScript 中使用 Promises 从对象的 2 个方法返回数据,这将在生产中调用端点。
我的MovieApi
对象我有 2 个承诺,我想首先返回一个电影列表,然后是 1 个按 id 的电影。我想使用承诺来避免回调地狱。我正在遵循列出的方法作为Arent promises just callbacks问题的答案,但我显然做错了,因为我有错误findMovie is not defined
像这样调用电影承诺......但尝试调用我的第二种.then()
方法时出现错误
有没有办法摆脱回调地狱,或者我只需要再次调用 MovieApi 对象,本质上与我使用回调有相同的可读性问题。
javascript - 即使我在所有 then-ables 中都使用了拒绝回调,我是否总是需要 catch() ?
我将捕获放在最后,但它们至少在一个特定实例中返回空对象。对于任何不为人知的事情是否需要捕获,或者只是把我搞砸了?
这是错的吗?或者它是否有某种用途,即使我仍然对.then(resolve, reject)
所有父链 then-ables 中的所有方法使用使用错误/拒绝处理程序?
编辑:更好的代码示例,我希望。我想我可能仍然在命名中使用某种反模式,我rejectMessage
在我的例子中,它是 jqXhr 对象,对吧?
所以也许我应该准确地命名它们或什么?即jqXhr
?顺便说一句,我喜欢在每个内部当场拒绝它的原因then()
,如果有错误,是因为这样我可以大量记录每个单独的呼叫,如果那里特别有问题,那我就没有追踪任何东西。微博,因为我可以。
Promise 正在帮助以这种方式打开调试的世界。
这是我尝试过的三个示例。我更喜欢方法 1 和方法 2,我绝不会回到方法 3,这是我在应许之地开始的地方。
我也在某个地方运行它onready
作为另一个备份。
编辑错误示例
javascript - 我可以在 Parse JavaScript SDK 中使用其他的 Promise 实现吗?
我担心使用 JQuery 兼容的 Promise 对 Parse 的引用,因为我读过 jQuery Promise允许消费者改变 Promise 的状态。是否可以在 Parse JavaScript SDK中使用另一个已知符合Promises/A+的 Promise 实现(例如ECMAScript 6 实现或Bluebird )?
通常我会假设这是不可能的,但是在 Parse JavaScript SDK 的 v1.4.2 中,Parse.Promise 的实现将属性“_isPromisesAPlusCompliant”定义为 false,然后在库中的各种函数中检查该属性。
注意这个问题最初是在Parse Developers group上提出的,但没有收到任何回复。
javascript - 一旦所有内部并发承诺都已解决或被拒绝,就解决一个承诺
我正在寻找类似的东西Promise.all
,即使在一个或多个承诺拒绝或抛出错误的情况下,也会继续同时解决承诺。每个请求不依赖于另一个请求。
接近我想要的 - 请查看评论
我已经成功地Promise.all
一起使用,只解决了 fetchRequest 承诺,这导致了预期的结果(一系列结果和undefined
's),但我觉得这是错误的做事方式。它还消除了我使用抛出错误的能力。
有效,但感觉像是对 resolve 的错误使用
请仅本机 es6 Promise API 回答谢谢。
javascript - 在承诺中超时功能的最佳一般做法是什么
承诺一个带有超时的函数调用
我已经看到许多资源提供了类似的示例,Promise.race
用于在给定的时间段内使函数调用超时。这是一个很好的例子,说明如何Promise.race
在实践中使用。这是一些示例代码:
上面使用的简单方法Promise.race
在超时之前func
完成后立即拒绝承诺。否则,一旦func
函数在超时间隔之前完成,项目就会完成。
这听起来不错且易于使用。
但是,这是在 Promise 中使用超时的最佳做法吗?
当然,如果我们想使用 Promises 为函数调用设置超时,则可以使用上述方法。这些行动似乎仍然是一个很好的承诺。但是,这是否被认为是在 Promise 中使用超时的好习惯?如果没有,使用它有什么缺点?
我一直在寻找替代方法,但找不到本地 Promise 方法来做到这一点。
相反,一些外部 Promise 库提供timeout
如下功能:
蓝鸟用品
.timeout()
WinJS
.timeout()
也提供Q也自带
.timeout()
。
但是,Promise.timeout()
它似乎不是标准 ECMAScript 6 API 的一部分(如果我错了,请纠正我)。是否有任何推荐的方法来使用 ES6 Promises 本地处理超时?
javascript - Javascript异步示例不起作用
我正在试验 es6 承诺并将它们链接起来,但不明白为什么我的示例不起作用。
我想多次链接 printInterval() 和 setInterval() 并期望 _interval 像这样减少:
- 等待 3000 毫秒显示此消息
- 将间隔设置为 2000
- 等待 2000 毫秒显示此消息
- 将间隔设置为 1000
- 等待 1000 毫秒显示此消息
- 将间隔设置为 500
- 等待 500 毫秒显示此消息
但我得到以下信息:
- 等待 3000 毫秒显示此消息
- 将间隔设置为 2000
- 将间隔设置为 1000
- 将间隔设置为 500
- 等待 500 毫秒显示此消息
- 等待 500 毫秒显示此消息
- 等待 500 毫秒显示此消息
.
谢谢你!
es6-promise - 从回流商店返回承诺
我正在开发我的第一个反应/回流应用程序,所以我可能以完全错误的方式解决这个问题。我正在尝试从回流商店的操作处理程序返回一个承诺。这是代表我如何尝试执行此操作的最小代码。如果我在浏览器中显示它,我会收到一条错误消息,指出永远不会捕获承诺,因为在启动操作时不会将 onLogin 函数的结果传回。做这个的最好方式是什么?
javascript - 创建(ES6)承诺而不开始解决它
使用 ES6 Promise,如何在不定义解决逻辑的情况下创建 Promise?这是一个基本示例(一些 TypeScript):
使用其他 Promise 库很容易做到这一点。以 JQuery 为例:
我能看到的唯一方法是将 resolve 函数存储在 Promise 的执行程序中的某个地方,但这看起来很混乱,而且我不确定它是在何时运行该函数时定义的——它总是在构造时立即运行吗?
谢谢。
javascript - 如何将此延迟样式承诺转换为 ES6 样式承诺
请参阅Nolan Lawson的文章中的新手错误 #4:使用“延迟”:We have a problem with promises(顺便说一句,这是一篇很棒的文章!),我尽量不再使用延迟样式的 promises。最近我遇到了一个实际示例,我无法弄清楚如何不以延迟方式对其进行编码,所以我需要一些建议。
这是一个例子,一个角度工厂:
我隐藏了一些不相关的细节(例如 的实现_modalScope
),核心思想是:$modal
提供一个包含两个按钮的 ui 小部件:Confirm和Cancel。单击Confirm时,调用_modalScope.confirm
并解决延迟的 Promise,否则单击Cancel_modalScope.cancel
时通过调用来拒绝延迟的Promise。
我试图通过 using 重写return $q(function(resolve, reject) { ... })
,但我真的不知道如何/何时在这个构造函数中调用resolve
和reject
,因为真正的逻辑在_modalScope.confirm/cancel
方法中。我为这个问题苦苦挣扎了好几天,真的希望有人能帮助我。
谢谢!