получить ценность от пожарного магазина занять время - PullRequest
0 голосов
/ 02 марта 2019

Проблема в том, что значение из базы данных обновляется после того, как ответ на действие Google завершен, я попробовал несколько вариантов, чтобы заставить функцию ждать обновления значения, но это не работает, мне нужновыполнить дважды, чтобы получить правильное значение log

function operation(callback) {
  dialogflowAgentDoc.doc(format).get()
  .then(doc => {
      console.log(doc.data().Url);
      Url = doc.data().Url;
  })
  .catch((err) => {
    console.log('Error getting documents', err);
  });
    callback(Url);
}

app.intent("Default Welcome Intent", conv => {
   new GetFormat();
   console.log("GetFormat Started");
   new operation(function(Url) {
    console.log("Ask Started");
        conv.ask(
	new SimpleResponse({
        speech: "Playing Gallay Tzahal",
        text: "Playing Gallay Tzahal"
    }),
  new MediaObject({
        name: 'Gallay Tzahal News',
        url: Url,
        description: "text",
        icon: new Image({
            url: 'https://upload.wikimedia.org/wikipedia/he/thumb/3/30/GaltzLogo.svg/150px-GaltzLogo.svg.png',
            alt: 'Media icon',
        }),
    })
	);
   });
   conv.ask(suggestions3);
});

1 Ответ

0 голосов
/ 02 марта 2019

Загрузка данных из облака занимает много времени.Чтобы предотвратить блокирование вашего приложения во время ожидания этих данных, Firestore (и большинство современных веб-API) загружает данные асинхронно и затем вызывает функцию, которую вы передаете в then(), когда данные доступны.

Это означает, чтокод, которому нужны данные из Firestore, должен быть внутри then() обратного вызова, который вызывается, когда данные доступны.Итак:

function operation(callback) {
  dialogflowAgentDoc.doc(format).get()
  .then(doc => {
      console.log(doc.data().Url);
      Url = doc.data().Url;
      callback(Url);
  })
  .catch((err) => {
    console.log('Error getting documents', err);
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...