如何使用多个异步/等待功能?

时间:2019-10-18 15:07:42

标签: javascript node.js async-await google-cloud-firestore google-cloud-functions

部署功能时出现错误:error Parsing error: Unexpected token 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);

我对异步/等待不是很熟悉。我没有找到问题。

1 个答案:

答案 0 :(得分:5)

您在request中的回调似乎缺少async关键字。可能会导致您看到的错误,该错误与您await所在的行有关,这意味着非异步功能中没有任何内容。

应该是:

//...   

request("https://itunes.apple.com/...", async function (error, response, body) {

//...

编辑:如评论中所述,也许不是。但是我也注意到saveLastReview本身就是一个async函数,而且我不知道async函数在被await修饰时的行为。如果我首先提到的内容不能解决问题,也许是另一种调查途径。