问题标签 [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.
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。
似乎节点检查this
on 调用,例如Promise.resolve.call(this, val)
是 a Promise
,而不是(正确?)Promise
或其派生类(v0.12.0)。
以上是否不再有效,或者没有纳入规范,或者只是没有由 traceur 和/或节点实现?
javascript - 排队异步承诺
我正在使用 Promise 查询一个 rest api(使用httpplease和Promise 插件):
这会返回一个我可以使用的承诺,例如:
现在我正在尝试对 api 连接进行身份验证,为此我需要将 2 个异步调用排队到其余 api:1.- 请求身份验证令牌 2.- 使用身份验证令牌进行实际调用:
客户端代码将保持不变:
不幸的是,上面的代码在第一个完成之前返回了最终的承诺(即,令牌在最后的“then”中是 undef)。
我可能遗漏了一些东西,但我认为这应该在阅读后工作:
“如果您返回一个值,则使用该值调用下一个“then”。但是,如果您返回类似 Promise 的内容,则下一个“then”等待它,并且仅在该 Promise 解决时调用(成功/失败) "
知道怎么做吗?
米;
编辑:修正了代码中的错字
javascript - Karma、PhantomJS 和 es6 Promise
我正在编写一个使用新 es6 承诺的 JavaScript 库。我可以在 Firefox 中测试这个库,因为 Promise 已经定义好了。但是,当我尝试使用 Karma 和 PhantomJS 测试我的代码时,我得到了错误Can't find variable: Promise.
。我猜这是因为 PhantomJS 浏览器还不支持 es6 承诺。
如何配置 Karma 以引入 polyfill 以实现承诺?
javascript - 何时调用 Promise.then() 钩子?
我观察到 Firefox 的承诺延迟了完整性通知。以下断言失败,因为 onFullfilled() 调用太晚*。
何时保证在 Promise 解决方案上调用 onFullfilled()?
* 在我的情况下,测试框架报告断言失败后出现“已完成”日志消息。
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:
javascript - 取消一个普通的 ECMAScript 6 Promise 链
是否有清除.then
JavaScriptPromise
实例的 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()
解决它之前被拒绝。
javascript - 如何在 Co-Request 模块和 NodeJs 中对文件进行管道响应?
我正在使用Co-Request 从 http url 读取 Zip 文件,并且我有以下代码可以从服务器读取..
该代码已经有效。但我不知道如何将响应 Zip 写入文件。
Co-Request 实际上是 Request 的包装器,我在下面找到了将文件传输到流的代码。但不确定如何使用 Co-Request with yield 来编写相同的内容。
请帮助如何使用 yield 和 co-request 将响应 zip 写入文件
javascript - 在内部承诺解决之前承诺解决
我有一个承诺,我希望它只有在内部承诺解决后才能解决。现在它在“loadend”回调中达到“resolve”函数之前解析。
我错过了什么?我对您应该使用 resolve 的方式以及如何在另一个 Promise 中使用 Promise 感到困惑。
我在网上找不到任何有帮助的东西。
在下面的示例中,我基本上加载了一堆文件,对于每个文件,我得到一个 blob,我想在文件阅读器中传递这个 blob。
将所有文件传递给文件阅读器后,我想转到承诺链中的下一个函数。
现在它进入链中的下一个函数,而无需等待调用 resolve。
javascript - 是否可以在生成器中包装承诺?
我正在尝试使用生成器创建一个承诺包装器,以便我可以这样做:
到目前为止,我一直在尝试:
但这失败了,因为不允许在法线内屈服。有什么解决方法吗?谢谢 :D
ps:我是用 babel 把代码从 es6 翻译成 es5
javascript - Promise 构造函数回调是异步执行的吗?
假设我有这个代码
我想知道的是函数是否y
会异步执行。