Di sini usersList berisi daftar nama pengguna orang dan androidNotificationToken adalah bidang dalam dokumen pengguna yang berisi token untuk mengirim notifikasi.

const registrationTokens=[];
const indexOfSender=usersList.indexOf(senderUsername); // to remove the name of person sending message
let removedUsername=usersList.splice(indexOfSender,1);

usersList.forEach(async(element)=>{
                    const userRef = admin.firestore().collection('users').where("username","==",element);
                    const doc = await userRef.get();
                    registrationTokens.push(doc.data().androidNotificationToken);
                });
TypeError: doc.data is not a function
    at usersList.forEach (/workspace/index.js:191:37)
    at process._tickCallback (internal/process/next_tick.js:68:7)
0
lonewolf 19 November 2020, 19:14

1 menjawab

Jawaban Terbaik

userRef.get() akan menampilkan QuerySnapshot (bukan DocumentSnapshot) objek yang dapat berisi 0 atau lebih dokumen yang cocok dari kueri. Gunakan API yang disediakan oleh QuerySnapshot untuk menemukan dokumen yang dihasilkan, meskipun Anda hanya mengharapkan satu dokumen.

Jika Anda mengharapkan hanya satu dokumen dari kueri, Anda setidaknya harus memverifikasi bahwa Anda mendapatkannya sebelum mengindeks ke dalam kumpulan hasil.

const query = admin.firestore().collection('users').where("username","==",element);
const qsnapshot = await query.get();
if (qsnapshot.docs.length > 0) {
    const doc = qsnapshot.docs[0];
    const data = doc.data();
}
else {
    // decide what you want to do if the query returns nothing
}
1
Doug Stevenson 19 November 2020, 16:23