具有云功能的异步功能(异步语法错误)
async function with cloud functions (syntax error on async)
我的 index.js 中有以下代码:
exports.queryAPI = functions.https.onRequest((request, response) => {
return cors(request, response, () => {
return APICall(request.params.searchTerm).then((result) => {
console.log(result);
return result;
}).catch(() => {
return response.status(400).json({ error: 'Something went wrong.' });
})
});
});
async function APICall(search) {
const response = await apicalypse({
queryMethod: "body",
headers: {
'Accept': 'application/json',
'user-key': API_KEY
},
responseType: 'json',
timeout: 1000,
})
.fields(["name"]) // fetches only the name and movies fields
.search(search) // search for a specific name (search implementations can vary)
// .where("age > 50 & movies != n") // filter the results
// .where(["age > 50", "movies != n"]) // same as above
.request(API_URL);
return response.data;
}
当我尝试部署此函数时出现以下错误:
Function load error: Code in file index.js can't be loaded.
Is there a syntax error in your code?
Detailed stack trace: /user_code/index.js:34
async function APICall(search) {
^^^^^^^^
SyntaxError: Unexpected token function
根据我的搜索,我使用 async 完成了正确的功能。有人指出我犯了错误吗?
您在本地计算机上使用的节点版本可能低于 8。版本 8 是第一个支持 ES7 async/await 语法的版本。因此,第一件事是更新本地节点安装。使用 node --version
.
检查版本
Cloud Functions 默认使用节点 6 作为 运行 时间,因此如果您希望部署的代码使用 async/await 到 运行,您还必须告诉 Firebase目标节点 8 的 CLI。节点 8 支持处于测试阶段。您可以在 the documentation and in this blog.
中阅读有关定位节点 8 的信息
Node.js 需要版本 8。在您的开发机器上执行此操作:
nvm install 8.6.1
nvm alias default 8.6.1
然后在您的 functions
目录中,打开 package.json
并添加:
"engines": {
"node": "8"
},
我不确定原因,但是 await
命令只对我有效 index.js。如果我将相同的命令移动到另一个文件和 exports
函数,我会得到与你的 async
错误相同的编译错误。
我的 index.js 中有以下代码:
exports.queryAPI = functions.https.onRequest((request, response) => {
return cors(request, response, () => {
return APICall(request.params.searchTerm).then((result) => {
console.log(result);
return result;
}).catch(() => {
return response.status(400).json({ error: 'Something went wrong.' });
})
});
});
async function APICall(search) {
const response = await apicalypse({
queryMethod: "body",
headers: {
'Accept': 'application/json',
'user-key': API_KEY
},
responseType: 'json',
timeout: 1000,
})
.fields(["name"]) // fetches only the name and movies fields
.search(search) // search for a specific name (search implementations can vary)
// .where("age > 50 & movies != n") // filter the results
// .where(["age > 50", "movies != n"]) // same as above
.request(API_URL);
return response.data;
}
当我尝试部署此函数时出现以下错误:
Function load error: Code in file index.js can't be loaded.
Is there a syntax error in your code?
Detailed stack trace: /user_code/index.js:34
async function APICall(search) {
^^^^^^^^
SyntaxError: Unexpected token function
根据我的搜索,我使用 async 完成了正确的功能。有人指出我犯了错误吗?
您在本地计算机上使用的节点版本可能低于 8。版本 8 是第一个支持 ES7 async/await 语法的版本。因此,第一件事是更新本地节点安装。使用 node --version
.
Cloud Functions 默认使用节点 6 作为 运行 时间,因此如果您希望部署的代码使用 async/await 到 运行,您还必须告诉 Firebase目标节点 8 的 CLI。节点 8 支持处于测试阶段。您可以在 the documentation and in this blog.
中阅读有关定位节点 8 的信息Node.js 需要版本 8。在您的开发机器上执行此操作:
nvm install 8.6.1
nvm alias default 8.6.1
然后在您的 functions
目录中,打开 package.json
并添加:
"engines": {
"node": "8"
},
我不确定原因,但是 await
命令只对我有效 index.js。如果我将相同的命令移动到另一个文件和 exports
函数,我会得到与你的 async
错误相同的编译错误。