Search code examples
javascripttypescriptfirebasegoogle-cloud-firestoreangularfire2

FIREBASE getting document data


I'm making an app and trying to get product data by it's id inside a modal in ionic 4. I'm using typescript to do it but without luck. Because de calls to firebase are asynchronous i cannot get the data that is held in firebase and also because i'm new to subject i cannot figured out the proper way to write the code. I read about how to do it but i'm having a hard time to achieve it.

Here is my function that tries to grab product data from firebase. It always logs empty on console.log('todo', todo).

async editProduct(id) {
        const getTodo = docRef => {
            setTimeout(() => {
                docRef = this.afs.collection("products").doc(id);
                docRef.get().subscribe((doc) => {
                    if (doc.exists) {
                        let data = doc.data();
                        return data;
                    } else {
                        console.log("No document.");
                        return false;
                    }
                });
            }, 2000)
        }

        getTodo(todo => {
            console.log('todo', todo)
        })

        const modal = await this.modalCtrl.create({
            component: AdminProductPage,
            'id': id,
        });
        await modal.present();
    }

Solution

  • There is something wrong with your "getTodo". Probable you are logging empty data with your code, I can give you the proper functional example:

    myData
    
    editProduct() {
        this.afs.collection("products").doc(id)
            .valueChanges()
            .subscribe(data => {
              console.log(data)
              myData = data
            })
    }
    
    getData() {
        console.log(this.myData) // You will log it twice with this line
    }
    

    GOOGLE EXAMPLE

    docRef.get().then((doc) => {
        if (doc.exists) {
            console.log("Document data:", doc.data());
        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
    }).catch((error) => {
        console.log("Error getting document:", error);
    });
    

    https://firebase.google.com/docs/firestore/query-data/get-data?hl=es