Как искать один объект в Firebase, а затем что-то делать с ним, не используя forEach? - PullRequest
0 голосов
/ 18 марта 2020

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

function addStuff(email) {
  return admin.firestore().collection('users').where('email', '==', email).get().then((users) => {
     if (users.size !== 1) {
       throw Error("Found "+users.size+" matching users for "+email);
     }
     // Somehow get the id of the first (and only) user in the snapshot without forEach, then:
     new_data = {
       user_id: userID,
       other_data: XXX
     }
     return admin.firestore().collection("YYY").add(new_data);
   }).then(()=>{
     // Do some other things after database is updated
   }).catch(er=>{
     console.log("Error: "+er);
   })
}

1 Ответ

1 голос
/ 18 марта 2020

Вам просто нужно использовать docs свойство QuerySnapshot, которое возвращает «массив всех документов в QuerySnapshot» и использует первый элемент этого массива.

function addStuff(email) {
  return admin.firestore().collection('users').where('email', '==', email).get()
   .then((users) => {
     if (users.size !== 1) {
       throw Error("Found "+users.size+" matching users for "+email);
     }
     const new_data = users.docs[0].data();

     return admin.firestore().collection("YYY").add(new_data);
   }).then(()=>{
     // Do some other things after database is updated
   }).catch(er=>{
     console.log("Error: "+er);
   })
}
...