适用于Firebase异步的云功能等待样式

时间:2017-06-08 19:40:05

标签: firebase google-cloud-functions

看起来Cloud Functions不支持Async-Await表示法。有没有办法可以使用Babel直到他们做或者建议使用promises?

我在Node上的当前函数是这样的:

exports.getToken = async (req, res) => {
  //1. Generate token from Braintree
  const result = await gateway.clientToken.generate();

  //2. Return the client token
  res.json(result.clientToken);
};

6 个答案:

答案 0 :(得分:41)

Cloud Functions运行node.js的LTS版本,此时根据documentation是6.14.0。 node 6.x支持EcmaScript 6,does not include async/await

但是,您可以使用TypeScript编写代码,并将其编译为ES5 / ES6,这将有效地将async / await的使用转换为promises。网络搜索表明,也许this plugin可以用来帮助Babel进行类似的转换。

值得注意的是,Firebase CLI现在允许您使用native TypeScript support初始化新的云功能项目,这是Firebase团队目前向开发人员推荐的内容。

如果您不想使用TypeScript,您现在也可以选择节点8(目前处于测试阶段,并且支持async / await for plain JavaScript)作为部署目标。您可以follow the documentation to edit your package.json表示您的功能应该部署到节点8。

答案 1 :(得分:33)

现在,您可以通过在myTab.ApplyTemplate(); var scrollviewer = myTab.Template.FindName("sv", myTab) as ScrollViewer; if (scrollviewer != null) { scrollviewer.ApplyTemplate(); _scrollBar = scrollviewer.Template.FindName("PART_HorizontalScrollBar", scrollviewer) as ScrollBar; if (_scrollBar != null) { _scrollBar.SmallChange = 0.5; } } 中添加 Node.js版本8

functions/package.json

示例:this answer in fb-sdk github issues

答案 2 :(得分:6)

我没有转换TypeScript,而是在关注very nice post之后编译了我的javascript并查看了this repository

基本上你可以这样做:

npm install -g @babel/cli @babel/core @babel/preset-env
  • <强>更新
    我在版本&#34; 7.0.0-beta.51&#34;上遇到了麻烦。巴贝尔&#34; 7.0.0-beta.44&#34;还好。
    切换到稳定版本6

    npm install --save-dev babel-cli babel-preset-env

在项目文件夹中创建文件.babelrc

{
  "presets": [
    ["@babel/env", {
      "targets": {
        "node": "6.11.5"
      }
    }]
  ]
}

移动你的&#34;功能&#34;文件夹到&#34; firebaseFunctions&#34;文件夹,然后运行

babel firebaseFunctions --out-dir functions --copy-files --ignore firebaseFunctions/node_modules

或者为要转换的每个文件运行此命令

babel originalfile.js --out-file transpiledfile.js

答案 3 :(得分:0)

在您的functions/.eslintrc.json文件中设置为'ecmaVersion': 2017 这将消除eslint语法错误

"parserOptions": {
    "ecmaVersion": 2017
 },

在您的functions/package.json文件中,通过添加以下内容将node版本设置为8

"engines": {
     "node": "8"
},

这会将云节点版本更新为8,默认节点版本为6

答案 4 :(得分:0)

上述解决方案并不适合我一个人。我不得不更新到最新的Firebase工具:

BadImageFormatException

,然后通过添加以下内容更新我的package.json:

npm update -g firebase-tools

一切都与async / await正常工作。

此博客的积分https://howtofirebase.com/cloud-functions-migrating-to-node-8-9640731a8acc

答案 5 :(得分:0)

正如@adam所说,解决了我的问题,以重新安装/升级全局Firebase软件包

区别在于我使用的是 NVM (节点版本管理器)。 不知何故,我的默认节点(v13.x)有了firebase-tools,但是我没有在 project node (v10 / 8)上全局安装 所以首先:

nvm use 10

然后:

npm i -g firebase-tools

以正确的节点版本重新安装可以使我的异步功能正常运行。