Javascript 如何使用多个异步/等待函数?
部署函数时出错:错误分析错误:意外的令牌saveLastReview 我需要获取一些文档值,然后调用url请求,然后在文档中设置数据Javascript 如何使用多个异步/等待函数?,javascript,node.js,async-await,google-cloud-firestore,google-cloud-functions,Javascript,Node.js,Async Await,Google Cloud Firestore,Google Cloud Functions,部署函数时出错:错误分析错误:意外的令牌saveLastReview 我需要获取一些文档值,然后调用url请求,然后在文档中设置数据 async function getValue() { try { var doc = await admin.firestore().collection('mycollec').doc('mydoc').get(); var data = doc.data() return data; } catch(e) {
async function getValue() {
try {
var doc = await admin.firestore().collection('mycollec').doc('mydoc').get();
var data = doc.data()
return data;
} catch(e) {
console.log(e);
return null;
}
}
async function saveLastReview(authorName) {
var rating = "4";
var title = "my title";
var content = "my content";
let data = {
rating : rating,
title: title,
content: content
};
try {
var doc = await admin.firestore().collection('mycollec').doc('mydoc').collection('reviews').doc(authorName).set(data);
return doc;
} catch(e) {
console.log(e);
return null;
}
}
app.get('/hello-world', async(req, res) => {
var data = await getValue();
if (data === null) {
request("https://itunes.apple.com/gb/rss/customerreviews/id=284882215/sortBy=mostRecent/json", function (error, response, body) {
//code to get authorname from the response
var result = await saveLastReview(authorname);
//check if doc was set correctly
//do something
})
}
return res.status(200).send("sent !");
});
module.exports.app = functions.https.onRequest(app);
我不太熟悉async/await。我没有发现问题。请求中的回调似乎缺少async关键字。可能会导致您看到的错误,该错误与您等待的行有关,这在非异步函数中没有任何意义 应该是:
//...
request("https://itunes.apple.com/...", async function (error, response, body) {
//...
编辑:正如评论中提到的,可能不是这样。但我也注意到saveLastReview本身是一个异步函数,我不知道异步函数在等待它们时的行为。如果我首先提到的内容不能解决问题,那么可能还有另一种调查途径。请求中的回调似乎缺少async关键字。可能会导致您看到的错误,该错误与您等待的行有关,这在非异步函数中没有任何意义 应该是:
//...
request("https://itunes.apple.com/...", async function (error, response, body) {
//...
编辑:正如评论中提到的,可能不是这样。但我也注意到saveLastReview本身是一个异步函数,我不知道异步函数在等待它们时的行为。如果我前面提到的没有解决这个问题,也许还有另一种调查方法。非异步函数中的wait将以一个SyntaxError结束:wait仅在异步函数和异步生成器中有效啊,是的!所以实际上可能问题是OP正在等待一个异步函数…非异步函数中的wait将以一个SyntaxError结束:wait仅在异步函数和异步生成器中有效啊,是的!所以实际上可能问题是OP正在等待一个异步函数…你在哪个浏览器上?可能不支持异步等待。请考虑使用请求承诺模块来获得对承诺更友好的API。您现在遇到的问题是,在HTTP请求完成之前发送的响应存在严重问题,这意味着由于云函数的工作方式,响应可能永远不会完成。@Grabofus此代码没有在浏览器中运行,而是在云函数的node.js上运行。您使用的浏览器是什么?可能不支持异步等待。请考虑使用请求承诺模块来获得对承诺更友好的API。您现在遇到的问题是,在HTTP请求完成之前发送的响应存在严重问题,这意味着由于云函数的工作方式,响应可能永远不会完成。@Grabofus此代码不是在浏览器中运行的,而是在云函数中的node.js上运行的。