简体   繁体   中英

Firebase Cloud Functions: TypeError snapshot.forEach is not a function

I've been struggling to understand why my Firebase cloud function isn't working.

I'm deleting a reserved number in a collection called 'anglerNumbers' when a new user has registered and when that users' document has been created. I use this on the client to make sure a reserved number can't be used twice. I'm following the documentation here: https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 (Using Node.js)

But I keep getting the Error: TypeError: snapshot.forEach is not a function

Here's the function:

exports.newUser = functions.firestore.document('users/{userId}')
.onCreate((snap, context) => {
    const newUserNumber = snap.data().anglerNumber;
    const anglersRef = admin.firestore().collection('anglerNumbers');
    const snapshot = anglersRef.where('anglerNumber', '==', newUserNumber).get();
    if (snapshot.empty) {
        console.log('No matching documents.');
        return;
    }  
    snapshot.forEach(doc => {
        console.log(doc.id, '=>', doc.data());
        doc.delete();
    });
}) 

It does not console log 'No matching documents'. So there are documents but I can't perform the forEach as indicated by the documentation. What am I missing? Thanks!

in this line in your code:

const snapshot = anglersRef.where('anglerNumber', '==', newUserNumber).get();

You assume that get resolves immediately to a snapshot but in fact get() returns a promise that will resolve into a snap shot. You need to wait for this async function.

Either use await if that is possible in your context or use:

anglersRef.where('anglerNumber', '==', newUserNumber).get().then((snapshot)=>{
   //do you processing
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM