【问题标题】:Why can't I use Promise in node v0.11.11?为什么我不能在 node v0.11.11 中使用 Promise?
【发布时间】:2014-02-13 12:17:04
【问题描述】:

我只是在搞乱节点的v0.11 分支,我想知道为什么我不能使用本机ES6 Promise 对象,即使打开了--harmony

我的普通 chrome 浏览器:

Google Chrome    32.0.1700.77 (Official Build 244503) 
JavaScript       V8 3.22.24.10

支持它们,node.js v0.11.11 告诉我:

> process.versions.v8
'3.22.24.19'

那是什么?

【问题讨论】:

  • 目前在 Chrome 中的 Promise 是 DOM 期货。此外,它们是非常实验性的,API 可能会改变(atm 的讨论非常多)。考虑使用Bluebird promise instead as they're faster, have better stack traces and stable
  • 所以基本上是因为它是 DOM api 而不是 javascript API。
  • @mpm are 在 ES6 中承诺,他们只是还没有“解决” - Chrome 的人也很生气:esdiscuss.org/topic/promise-cast-and-promise-resolve#content-77
  • @BenjaminGruenbaum -- 这解释了为什么节点没有它们,但为什么它们被认为是 DOM 的一部分?我一直在使用q,这不是我想找图书馆的问题,只是好奇为什么它不起作用。如果您发布答案,我会接受:)

标签: javascript node.js promise


【解决方案1】:

Native Promise 已加入,您现在可以使用它们了。它们仍然比 Bluebird 之类的库更慢且更难调试,但它们确实存在。


目前在 Chrome 中的 Promise 是 DOM Futures。此外,它们是非常实验性的,API 可能会改变(atm 的讨论非常多)。

考虑使用Bluebird promise instead as they're faster, have better stack traces and are stable

它比 Q 之类的库要快得多(快两个数量级),它具有更好的堆栈跟踪和完全符合规范的 API。当然你也可以自己编译node和v8——有promises in v8 itself

在 ES6 中有承诺,只是还没有“解决” - making the Chrome people are quite angry too

它们也被认为是 DOM 的一部分,因为未来的 DOM API 将使用 Promise。

【讨论】:

  • 注意:如果您自己编译 Node 和 V8,请注意这些承诺包括有争议的方法,例如 .chain(然后是非展开),这些方法可能会或可能不会成为标准。
  • 感谢您的信息 :) 碰巧提到了 Promises 何时会被合并到 v8 中?
  • @zyklus 事实上,现在关于它们的争论颇多。人们正在努力工作,但我相信未来几个月不会如此。我认为你最好的选择是像 Bluebird 这样的东西,它与本机一样快并且支持相同的 API。
  • 是的,我正在开始一个新项目。模糊地考虑将 bluebird 填充到 global.Promise 上,然后使用节点 v0.12 或在合并 Promise 时将其删除
  • @zyklus,自 3.23.14 版(2013 年 11 月 28 日)起,ES6 承诺就已经在 V8 中了。但 node 仍然必须赶上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2017-10-26
  • 2015-04-06
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
相关资源
最近更新 更多