Javascript 如何使用多个异步/等待函数?

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) {

部署函数时出错:错误分析错误:意外的令牌saveLastReview

我需要获取一些文档值,然后调用url请求,然后在文档中设置数据

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上运行的。