看起来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);
};
答案 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
答案 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
以正确的节点版本重新安装可以使我的异步功能正常运行。