Почему для каждого работает, а для ... из ... нет? - PullRequest
0 голосов
/ 18 июня 2020

Это мой код для получения данных из firebase:

const querySnapshot = await db.collection('entries').get()

Я хочу добавить данные каждого элемента ввода в новый массив, для которого у меня есть два способа сделать это:

querySnapshot.forEach((entry) => {
   const entryData = entry.data()
   entries.value.push(entryData)
})

и

for (const entry of querySnapshot) {
      const entryData = entry.data()
      if (entry) { entries.value.push(entryData)
}

Первое решение работает, но второе вызывает эту ошибку: TypeError: "querySnapshot is not iterable". Разве эти два способа в основном не делают одно и то же? Почему один выдает ошибку, а другой нет?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Они не то же самое. Первый, когда просто означает, что ваш объект имеет метод forEach.

Второй означает, что ваш объект имеет свойство [Symbol.iterator], которое является генератором. Это делает ваш объект повторяемым.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator

0 голосов
/ 18 июня 2020

A querySnapshot, который возвращается из метода get, не является массивом или итерацией.

https://firebase.google.com/docs/reference/js/firebase.firestore.QuerySnapshot

forEach - это метод из объекта querySnapshot, поэтому вы можете его использовать.

...