如何在Firestore中将诺言与批处理一起使用

时间:2018-12-26 06:54:06

标签: javascript google-cloud-firestore

使用我当前的代码,在将大多数文档添加到批处理之前会启动batch.commit()。如何链接我的诺言,以便可以从子集合中获取文档,然后将其添加到批处理中,然后在对所有子集合执行操作之后,再提交批处理。

exports.syncUserDetailsWithFriends = functions.firestore
    .document('users/{userId}')
    .onUpdate(change => {
      const newUserData = change.after.data();
      let usersRef = admin.firestore().collection('users')
      let batch = admin.firestore().batch();

      usersRef.get()
      .then(users => {
        users.forEach(userDoc => {
          let friendsRef = usersRef.doc(userDoc.id).collection('friends')
          friendsRef.get()
          .then(friends => {
            friends.forEach(friend => {
              if (friend.id == newUserData.id) {
                batch.update(friendsRef.doc(friend.id), newUserData)
              }
            })
          })
        })
      }).then(batch.commit().catch(error => console.error(error)))
    });

0 个答案:

没有答案