问题标签 [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 投票
1 回答
5215 浏览

promise - 在 ES6 中扩展 Promise

我正在尝试扩展 Promise:

然后在派生类上调用static resolve,直接创建resolved promise:

在 traceur 中,这会产生:

在 Babel (run as babel-node --experimental promise.js) 中,它会导致:

我依赖于这个:

Promise 的所有静态方法都支持子类化:它们通过接收器创建新实例(想想:new this(...))并通过它访问其他静态方法(this.resolve(...) 与 Promise.resolve(.. .))。

来自http://www.2ality.com/2014/10/es6-promises-api.html

似乎节点检查thison 调用,例如Promise.resolve.call(this, val)是 a Promise,而不是(正确?)Promise 或其派生类(v0.12.0)。

以上是否不再有效,或者没有纳入规范,或者只是没有由 traceur 和/或节点实现?

0 投票
0 回答
411 浏览

javascript - 排队异步承诺

我正在使用 Promise 查询一个 rest api(使用httppleasePromise 插件):

这会返回一个我可以使用的承诺,例如:

现在我正在尝试对 api 连接进行身份验证,为此我需要将 2 个异步调用排队到其余 api:1.- 请求身份验证令牌 2.- 使用身份验证令牌进行实际调用:

客户端代码将保持不变:

不幸的是,上面的代码在第一个完成之前返回了最终的承诺(即,令牌在最后的“then”中是 undef)。

我可能遗漏了一些东西,但我认为这应该在阅读后工作

“如果您返回一个值,则使用该值调用下一个“then”。但是,如果您返回类似 Promise 的内容,则下一个“then”等待它,并且仅在该 Promise 解决时调用(成功/失败) "

知道怎么做吗?

米;

编辑:修正了代码中的错字

0 投票
5 回答
21518 浏览

javascript - Karma、PhantomJS 和 es6 Promise

我正在编写一个使用新 es6 承诺的 JavaScript 库。我可以在 Firefox 中测试这个库,因为 Promise 已经定义好了。但是,当我尝试使用 Karma 和 PhantomJS 测试我的代码时,我得到了错误Can't find variable: Promise.。我猜这是因为 PhantomJS 浏览器还不支持 es6 承诺。

如何配置 Karma 以引入 polyfill 以实现承诺?

0 投票
2 回答
820 浏览

javascript - 何时调用 Promise.then() 钩子?

我观察到 Firefox 的承诺延迟了完整性通知。以下断言失败,因为 onFullfilled() 调用太晚*

何时保证在 Promise 解决方案上调用 onFullfilled()?

* 在我的情况下,测试框架报告断言失败后出现“已完成”日志消息。

0 投票
5 回答
61725 浏览

javascript - fetch: Reject promise with JSON error object

I have an HTTP API that returns JSON data both on success and on failure.

An example failure would look like this:

What I want to achieve in my JavaScript code is something like this:

0 投票
17 回答
136783 浏览

javascript - 取消一个普通的 ECMAScript 6 Promise 链

是否有清除.thenJavaScriptPromise实例的 s 的方法?

我在QUnit之上编写了一个 JavaScript 测试框架。该框架通过在Promise. (对不起这个代码块的长度。我尽我所能评论它,所以感觉不那么乏味。)

如果测试超时,我的超时 Promise 将assert.fail()在测试上,以便将测试标记为失败,这一切都很好,但是测试继续运行,因为测试 Promise ( result) 仍在等待解决它。

我需要一个取消考试的好方法。我可以通过在框架模块this.cancelTest或其他东西上创建一个字段来做到这一点,并在测试中每隔一段时间检查一次(例如在每次then()迭代开始时)是否取消。但是,理想情况下,我可以$$(at).on("timeout", /* something here */)用来清除变量上剩余then()的 s result,这样就不会运行其余的测试。

这样的事情存在吗?

快速更新

我尝试使用Promise.race([result, at.promise]). 它没有用。

更新 2 + 混乱

为了解除对我的阻止,我在测试想法中添加了几行mod.cancelTest/polling。(我还删除了事件触发器。)

我在语句中设置了一个断点catch,它被击中了。现在让我感到困惑的是,该then()声明没有被调用。想法?

更新 3

想通了最后一件事。 fn.call()抛出了一个我没有发现的错误,所以测试承诺在at.promise.catch()解决它之前被拒绝。

0 投票
1 回答
3328 浏览

javascript - 如何在 Co-Request 模块和 NodeJs 中对文件进行管道响应?

我正在使用Co-Request 从 http url 读取 Zip 文件,并且我有以下代码可以从服务器读取..

该代码已经有效。但我不知道如何将响应 Zip 写入文件。

Co-Request 实际上是 Request 的包装器,我在下面找到了将文件传输到流的代码。但不确定如何使用 Co-Request with yield 来编写相同的内容。

请帮助如何使用 yield 和 co-request 将响应 zip 写入文件

0 投票
1 回答
6357 浏览

javascript - 在内部承诺解决之前承诺解决

我有一个承诺,我希望它只有在内部承诺解决后才能解决。现在它在“loadend”回调中达到“resolve”函数之前解析。

我错过了什么?我对您应该使用 resolve 的方式以及如何在另一个 Promise 中使用 Promise 感到困惑。

我在网上找不到任何有帮助的东西。

在下面的示例中,我基本上加载了一堆文件,对于每个文件,我得到一个 blob,我想在文件阅读器中传递这个 blob。

将所有文件传递给文件阅读器后,我想转到承诺链中的下一个函数。

现在它进入链中的下一个函数,而无需等待调用 resolve。

0 投票
3 回答
2790 浏览

javascript - 是否可以在生成器中包装承诺?

我正在尝试使用生成器创建一个承诺包装器,以便我可以这样做:

到目前为止,我一直在尝试:

但这失败了,因为不允许在法线内屈服。有什么解决方法吗?谢谢 :D

ps:我是用 babel 把代码从 es6 翻译成 es5

0 投票
2 回答
4211 浏览

javascript - Promise 构造函数回调是异步执行的吗?

假设我有这个代码

我想知道的是函数是否y会异步执行。