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

javascript - 将承诺链中的值传递给后续处理程序

考虑这段代码:

请注意,这两个sendMessage*()函数都接受套接字作为参数。但只有第一个会得到这个,因为只有第一个会从openSocket().

我可以通过在外部范围中使用一个变量来解决这个问题,即一旦解决了套接字就分配它,然后在sendMessage2().

另外,我知道我可以使用一些库支持,就像这个关于 Q 的答案中描述的那样。

我正在寻找一种设计此代码的规范方法,其中:

  • 不需要外部范围内的任何变量
  • 不会依赖 3rd 方承诺库(应该基于 ES6 承诺)

有没有办法做到这一点?或者重构我的代码以使其更容易会更好吗?

0 投票
0 回答
24 浏览

javascript - Promise 与任意第三方模块

我仍然是 Promise 的新手(如Promises/A+中,而不是 jQuery),并且想将我的一些旧客户端代码转换为返回 Promise 以便下游可以然后不必将回调传递给上游,特别是,与网络存储和 AJAX 有任何关系。

问题是,我正在使用的 AJAX 库(双簧管.then),它有一个 jQuery 风格的 API,但没有方法,这意味着我需要自己构造和返回new Promise,但是下面的方法是最优的吗?我们可以使用静态而不包装函数来做一些事情Promise.resolvePromise.reject?我的例子如下:

旧代码

新代码

更好的代码?

(我打算单独使用本机 Promise 和 polyfill 来做到这一点,但如果有库对此有帮助,我很高兴看看它们的实现。)

0 投票
6 回答
51865 浏览

javascript - 如何调试 javascript 承诺?

我试图了解如何调试基于承诺的异步代码。承诺是指基于 ECMAScript 6 的承诺,而调试是指使用内置的 chrome 或 firefox 调试器。

我遇到的问题是,当发生错误时,无论我如何“拒绝”它,我似乎都无法获得堆栈跟踪。

我试过这些:

但是这些都没有返回代码中的实际错误或堆栈跟踪。

所以我的问题是 - 如何正确调试 javascript Promises?

0 投票
2 回答
11646 浏览

javascript - 是否应该将 Promise.reject 消息包装在 Error 中?

使用原生 (ES6) Promise。我应该拒绝错误吗

或者我应该用一个字符串拒绝:

浏览器行为有什么区别?

0 投票
24 回答
130496 浏览

javascript - 解决函数范围之外的 Javascript Promise

我一直在使用 ES6 Promise。

通常,Promise 是这样构造和使用的

但是为了灵活性,我一直在做类似下面的事情来解决问题。

然后

这工作正常,但有没有更简单的方法来做到这一点?如果没有,这是一个好习惯吗?

0 投票
2 回答
1921 浏览

javascript - 为什么 console.error 是一个方法而不是一个函数?

这些天我大量使用ES6 Promises 。onRejected因此,如果您不指定函数,很容易忘记异常:

如果我可以添加一些字节catch()来确保异常进入控制台,那就太好了:

不幸的是,这不起作用,因为console.error它是一种方法而不是函数。也就是说,您需要console在调用时指定接收方console.error()。您可以在浏览器控制台中轻松验证这一点:

这意味着添加我的catch()处理程序有点冗长:

诚然,它在 ES6 中要好一些:

但是最好避免额外的打字。更糟糕的是,如果您catch(console.error)今天使用,您的异常会被默默地忽略,这正是您要解决的问题!console.error()它需要成为一种方法,是否有任何基本的工作原理?

0 投票
2 回答
3334 浏览

javascript - 解决所有 javascript ES6 Promise 后如何运行

我正在替换一些使用 jQuery Deferred 对象的旧代码,并且正在使用 Bluebird/ES6 Promises 重写。

如果我有多个异步调用,在解决所有承诺后如何触发一个函数。

使用 jQuery Deferreds 会是这样的:

如何使用 ES6 Promise 语法重写它?

0 投票
3 回答
7211 浏览

javascript - Javascript ES6 会承诺支持'done' api吗?

例如

在大多数 promise polyfill 库中,done 会抛出错误,并且当前执行将退出。

但是如果我们使用p.then(),什么都不会发生。错误被承诺吞没了。如果我们使用p.catch,我们将无法退出当前执行。我想实现类似:

0 投票
1 回答
275 浏览

promise - 用原生承诺实现承诺队列?

我向您推荐@kriskowal的优秀文章“反应性一般理论”。在其中,他使用 Q 约定给出了承诺队列的以下实现:

您会看到它正在使用 Q 功能,例如deferget。我正试图围绕如何调整它以使用本地承诺,但我正在经历巨大的大脑冻结。(在处理这个问题的过程中,我还发现 Chrome 似乎提供了一种Promise.defer方法,AFAIK 不在规范中。)

有人可以帮忙吗?

0 投票
1 回答
3947 浏览

javascript - JavaScript Promise 不执行然后

我正在尝试在以下 JavaScript 代码中实现一个承诺,但是由于某种原因,process.then 函数实际上从未发生过。谁能明白为什么?我已经设置了新的 Promise 并在我使用控制台日志对其进行测试时执行它,但是它从不执行 .then 函数

谢谢