Карта коллекций облачных хранилищ Firebase и forEach - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь использовать функцию карты для создания массива элементов, возвращаемых из коллекции.

Моя реализация использует forEach для итерации, что прекрасно работает.Однако я не могу заставить его работать с функцией карты.

Вот код:

firestore.collection("notes").doc(this.props.id).collection('items').get()
.then((snap) => {
    let items = []
    snap.forEach((doc) => {
        items.push({id:doc.id,text:doc.data().text})
        console.log(`${doc.id} => ${doc.data()}`);
    });
    console.log(items)
});

Однако это не работает:

firestore.collection("notes").doc(this.props.id).collection('items').get()
.then((snap) => {
    let items = snap.map((doc) => {
        return {id:doc.id, text:doc.data().text}
    })
    console.log(items)
});

Это выдает ошибку, что «snap.map» не является функцией.

Я не могу понять, где я отключаюсь?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Метод forEach существует, но не отображается.

Однако вы можете получить массив из документов :

Массиввсех документов в QuerySnapshot.

, по которым вы можете вызвать карту, например:

let items = snap.docs.map(doc => {
    return { id: doc.id, text: doc.data().text }
})
0 голосов
/ 06 июня 2018

Небольшой пример, в моем случае, я обновляю что-то:

const query = ...collection("notes").doc(this.props.id).collection('items');

query.snapshotChanges().map(changes => {
     changes.map(a => {
     const id = a.payload.doc.id;
     this.db.collection("notes").doc(this.props.id).collection('items').update({
            someItemsProp: newValue,
                })
            })
        }).subscribe();
    }
0 голосов
/ 06 июня 2018

snap не может быть истинным массивом.Это, вероятно, какой-то массивоподобный объект.Попробуйте создать новый массив с оператором распространения (...), а затем поработать над этим, например:

firestore.collection("notes").doc(this.props.id).collection('items').get()
.then((snap) => {
    let items = [...snap].map((doc) => {
        return {id:doc.id, text:doc.data().text}
    })
    console.log(items)
});

Это должно преобразовать его в истинный массив, который даст вам возможность использовать .map функция.

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