【问题标题】:async/await breaks when I add my own custom babelrc当我添加自己的自定义 babelrc 时 async/await 中断
【发布时间】:2016-06-29 13:54:58
【问题描述】:

我想自定义我的 babelrc 以添加一些额外的插件。 Based on the 1.3.4 release notes,看起来完全可以。所以我做了这样的:

{
  "presets": ["babel-preset-meteor"],
  "plugins": ["add-module-exports", "transform-class-properties"]
}

但是,现在每当我尝试使用 async/await 时,它都会完全中断,说流星代码必须在光纤中运行。

Exception while invoking method 'add address' Error: Meteor code must always run within a Fiber.

这来自一个看起来像这样的方法:

export async function addAddress() {
  await [whatever];
}
Meteor.methods({
  'add address': addAddress
});

如果我完全删除 .babelrc,它似乎可以工作。

【问题讨论】:

  • 你可能需要将你的 async 包装在 Meteor.bindEnvironment() 中,但我不完全确定。
  • 但问题是,没有使用 .babelrc,它完全可以正常工作

标签: javascript asynchronous meteor ecmascript-6 babeljs


【解决方案1】:

我找到了问题。

显然,您不能覆盖流星的原生承诺,否则它会默默地破坏所有承诺,因为流星有自己的实现。

import Bluebird from 'bluebird';
global.Promise = Bluebird;

【讨论】:

  • 覆盖全局似乎是个好主意,但这意味着查看您的代码的普通开发人员无法知道哪些代码依赖于 Bluebird,哪些核心依赖于标准,这意味着您很容易结束不一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2011-08-12
相关资源
最近更新 更多