Как использовать несколько асинхронных / ожидающих функций? - PullRequest
1 голос
/ 18 октября 2019

У меня возникает ошибка при развертывании моих функций: 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);

Я не очень знаком с async / await. Я не нахожу проблему.

1 Ответ

4 голосов
/ 18 октября 2019

Похоже, что в вашем обратном вызове в request отсутствует ключевое слово async. Может привести к появившейся ошибке, которая относится к строке, где вы await, что ничего не значит в неасинхронной функции.

Вероятно, должно быть:

//...   

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

//...

РЕДАКТИРОВАТЬ: как упомянуто в комментарии, это возможно не это. Но я также заметил, что saveLastReview сама по себе является async функцией, и я не знаю, как ведут себя функции async, когда они await ed. Может быть, другой путь расследования, если то, что я упомянул первым, не решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...