Ждут ли onlick-функции обещаний? - PullRequest
0 голосов
/ 26 мая 2020

Сегодня я немного кодировал в JS. По сути, у меня есть сервер, который возвращает результат в виде обещания.

Рассмотрим, по сути, следующий код:

let reviewData = [];
db.get()
  .then(function (snap) {
    snap.forEach(function (doc) {
      reviewData.push(doc.data());
      console.log(reviewData[0]); //this works
    });
});
console.log(reviewData[0]); //this does not work here 

Когда я пытаюсь получить доступ к reviewData вне этого кода, он оказывается пустым. Однако, когда я получаю доступ к данным обзора внутри функции then, они там.

Это имеет смысл, потому что db.get () возвращает обещание, которое разрешено. кнопка на моей веб-странице, которая выполняет функцию при нажатии.

<button onclick="doThis()">Click</button> //this code is in the html document
function doThis() {
   console.log(reviewData[0]); //this works? Why?
}

Мой единственный вопрос в том, почему при срабатывании функции onclick данные из обещания видны? Ожидает ли функция onclick, когда будут отправлены данные reviewData?

Весь код скрипта находится в одном внешнем документе.

1 Ответ

0 голосов
/ 26 мая 2020

Javascript - асинхронный. Порядок действий следующий: 1. let reviewData = []; 2. db.get() 3. console.log(reviewData[0]) (сейчас ничего) 4. function (snap) { snap.forEach(function (doc) { reviewData.push(doc.data()); console.log(reviewData[0]); })}} 5. function doThis() { console.log(reviewData[0]);}

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