J'essaie de récupérer un document dans Cloud Firestore en fonction d'un ID de champ, mais cet ID est introuvable, comment le vérifier car il génère une erreur ?

    getMenu = () => {
    try {
        this.setState({
            loading_menu: true
        })

        var ref = firebase.firestore().collection('restaurants_menu')
            .where("rest_id", "==", this.getSelected.rest_id)
            .limit(this.state.limit_menu)

        ref.onSnapshot((querySnapshot => {
            var menu = querySnapshot.docs.map(doc => { return { ...doc.data(), id: doc.id } });
            var lastVisibleMenu = menu[menu.length - 1].rest_id;
            this.setState({
                menu: menu,
                lastVisibleMenu: lastVisibleMenu,
                loading_menu: false,
            });
        }));
    }
    catch (error) {
        console.log("SOMETHING HAPPENED, WE COULD NOT FETCH restaurants_menu:  ", error);
    }
}
1
user12396958 30 janv. 2020 à 23:59

1 réponse

Meilleure réponse

Si votre gestionnaire d'instantanés est invoqué, il n'y a pas eu d'erreur. Vérifiez simplement la longueur du tableau querySnapshot.docs pour savoir combien de documents ont été mis en correspondance par la requête. Ce n'est pas une erreur de faire correspondre 0 documents - vous devez vous attendre à ce que ce soit le cas.

Si vous souhaitez gérer d'éventuelles erreurs, vous devez transmettre plus d'un seul gestionnaire d'instantanés. La documentation de onSnapshot() suggère que vous devez passer un seul objet observateur avec diverses propriétés pour chaque type de fonction de gestionnaire.

ref.onSnapshot({
    next: snapshot => {
        // your snapshot handler code
    },
    error: error => {
        // your error handling code
    }
})
2
Doug Stevenson 30 janv. 2020 à 21:06