Как получить значение из Firestore, используя функции Firebase? - PullRequest
0 голосов
/ 17 октября 2019

Я хотел бы сделать очень простой запрос, чтобы получить текстовое значение моего документа 'LA'. Мне нужно извлечь значение, прежде чем делать с ним другие действия.

async function getValue() {

  doc = await admin.firestore().doc('cities/LA').get();
  console.log('Authorized User Data From Function:', doc.data());
  result = doc.data().text;
  return result;
}

app.get('/hello-world',  async(req, res) => {

  console.log("before" );

  var text = getValue();

  console.log(text);
  //...do something with text

  console.log("after" );

  return res.status(200).send("sent !");

});
module.exports.app = functions.https.onRequest(app);

У меня нет ошибок при развертывании.

/Users/user/Documents/APP TEST/functions/index.js
  170:12  warning  Avoid nesting promises          promise/no-nesting
  170:12  warning  Avoid nesting promises          promise/no-nesting
  173:12  warning  Unexpected function expression  prefer-arrow-callback
  180:12  warning  Unexpected function expression  prefer-arrow-callback

✖ 4 problems (0 errors, 4 warnings)
  0 errors and 2 warnings potentially fixable with the `--fix` option.

✔  functions: Finished running predeploy script.
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (42.45 KB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function app(us-central1)...
i  functions: updating Node.js 8 function sendIAPAnalytics(us-central1)...
✔  scheduler: all necessary APIs are enabled
✔  functions[sendIAPAnalytics(us-central1)]: Successful update operation. 
✔  functions[app(us-central1)]: Successful update operation. 

✔  Deploy complete!

Ожидаемые журналы:

before
Authorized User Data From Function:
<my text value>
after

Показано логов:

>Function execution started
>Function execution took 517 ms, finished with status code: 200

и ничего больше: (

Что не так?

Я тоже безуспешно пытался решить этот пост, ничего не отображается: https://stackoverflow.com/a/55240125/2123039

Спасибо

РЕДАКТИРОВАТЬ 1: Нет больше журналов с добавлением блока try / catch:

async function getValue() {

  try {
    doc = await admin.firestore().collection('cities').doc("LA").get();
    console.log('Authorized User Data From Function:', doc.data());
    result = doc.data();
    return result;

  } catch(e) {
    console.log(e);
  }

}

1 Ответ

3 голосов
/ 17 октября 2019

Делая async function getValue() {...}, вы объявляете асинхронную функцию (что правильно, поскольку функция get() является асинхронной). Но тогда вам нужно назвать его следующим образом

app.get('/hello-world',  async(req, res) => {

  console.log("before" );

  const text = await getValue();   // <- Here use await

  console.log(text);
  //...do something with text

  console.log("after" );

  return res.status(200).send("sent !");

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