如何在 Google Cloud 函数 (Firebase) 的快照中获取子快照?

若奥·阿尔维斯·马鲁乔

每次我删除我的/users节点时,我都试图让一些 for Loops 在谷歌云函数中运行

这是我正在使用的代码

exports.deleteUserAssets = functions.database.ref('/users/{userId}').onWrite((change, context) => {
const beforeData = change.before.val(); 
const afterData = change.after.val(); 
const userBuildings = Object.keys(beforeData.isAdmin); // get the  buildings of the user stored in the user/userId/isAdmin node ..  so far so good
const userId = beforeData.userIDforCloudFunctions; // I'm getting this from a /users/userid/userIDforCloudFucntions node ...so far so good (i've been logging it to confirm)
// making sure it was a delete operation ... so far so good
if (afterData !== null) {
    return 0;
} 
else {
    // on each building 
    for (var i = 0; i < userBuildings.length; i++) {
        let eachBuilding = [userBuildings[i]]
// HERE IS WERE THE PROBLEM IS: Trying to delete all depts + rooms + doors
        admin.database().ref('/buildings/' + eachBuilding)
            .child("hasDepts") 
            .once("value")
            .then(function(snapshot) { // This is where it goes south – snapshot is returning null
            snapshot.forEach(function(childSnapshot) {
                var deptKeyString = childSnapshot.key; // will try to get the keys of the departments stored under this space
                var deptsOnNode = admin.database().ref('/depts/' + deptKeyString);
                deptsOnNode.remove(); // and use the keys to delete each of the depts on depts
            });
        }); 

        admin.database().ref('/buildings/' + eachBuilding).set({}); // this is working
        admin.database().ref('/buildingsUserUid/' + userId +  '/' + eachBuilding).remove(); // this is working 
    }
}   
return 0;
});

的快照REF admin.database()。( '/建筑物/' + eachBuilding).child( “hasDepts”)被返回空。

我怎样才能得到它?除了admin.database()。REF()我试着去实现它firebase.database()。REF(),这是命令/对象我用得到的前端功能,此运行。我也试过functions.database()没有结果。

若奥·阿尔维斯·马鲁乔

考虑到 Doug Stevenson 在他的第二条评论中提到的内容:

exports.deleteUserAssets = functions.database.ref('/users/{userId}').onDelete((change, context, event) => {
    const beforeData = change.before.val(); // data before the write (data of all the doors child nodes)
    const afterData = change.after.val(); // data before the write (data of all the doors child nodes)
    const userBuildings = Object.keys(beforeData.isAdmin); // get the  buildings of the user
    const userId = beforeData.userIDforCloudFunctions;
    // make sure user was deleted
    if (afterData !== null) {
        return 0;
    } 
    else {
        // on each building
        for (var i = 0; i < userBuildings.length; i++) {
            let eachBuilding = [userBuildings[i]]
          // Need to RETURN the whole chain of promises
            return admin.database().ref('/buildings/' + eachBuilding)
                .child("hasDepts")
                .once("value")
                .then(function(snapshot) {
                    console.log(snapshot.val()) // this now works
                    snapshot.forEach(function(childSnapshot) {
                        console.log(childSnapshot.val()) // this works as well
                        var deptKeyString = childSnapshot.key; // get the keys of the departments stored under this space
                        var deptsOnNode = admin.database().ref('/depts/' + deptKeyString);
                     // and you can keep on going deeper if you return promises
                        return deptsOnNode
                        .child('hasRooms')
                        .once('value')
                        .then(function(grandchildSnapshot){
                            console.log(grandchildSnapshot.val())
                            grandchildSnapshot.forEach(function(grandGrandchildSnapshot){

                            var roomKeyString = grandGrandchildSnapshot.key;
                            var roomsOnDepts =  admin.database().ref('/rooms/' + roomKeyString);
                            admin.database().ref('/roomOwners/' + userId +  '/' + roomKeyString).remove();
                         // and return again here...
                            return roomsOnDepts
                                .child('hasDoors')
                                .once('value')
                                .then(function(grandgrandGrandchildSnapshot){
                                grandgrandGrandchildSnapshot.forEach(function(grandgrandGrandchildSnapshot){
                                    var doorKeyString = grandgrandGrandchildSnapshot.key;
                                    var doorsOnRooms = admin.database().ref('/doors/' + doorKeyString);
                                    doorsOnRooms.remove();
                                    let clipOwners = admin.database().ref('/clipOwners/' + doorKeyString);
                                    clipOwners.remove();
                                })
                                roomsOnDepts.remove();
                            })         
                        })
                        deptsOnNode.remove(); // use the keys to delete the depts on depts main Node
                    })
                });
                admin.database().ref('/buildings/' + eachBuilding).set({}); 
                admin.database().ref('/buildingsUserUid/' + userId +  '/' + eachBuilding).remove();
            });           
        }
    }   
    return 0;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Cloud Firestore函数中获取快照的父元素?

来自分类Dev

我如何获取数据快照,然后在 firebase 云函数 http 请求中更新数据库

来自分类Dev

如何获取Firebase快照的长度?

来自分类Dev

在Firebase中使用onUpdate函数时,如何检索返回快照的子级?

来自分类Dev

Firebase函数-如何从云函数返回文档快照?

来自分类Dev

如何删除快照数据中的 Firebase Cloud Function Push Key?

来自分类Dev

Firebase中的快照。如何更深入地了解快照

来自分类Dev

Firebase中的快照。如何更深入地了解快照

来自分类Dev

如何在Firebase函数中获取DownloadURL

来自分类Dev

Firebase Cloud Functions JavaScript - 如何在一个函数中从不同的表中获取多个数据

来自分类Dev

如何在 firebase 中手动拍摄多个快照

来自分类Dev

如何从firebase数据快照中检索数据

来自分类Dev

Firebase中的Cloud Functions:调用参数的类型为文档快照

来自分类Dev

如何使用 Cloud Firestore 从颤振中的数据快照中获取特定值?

来自分类Dev

如何在Android Google Play服务中创建快照

来自分类Dev

如何从Firestore到Google Cloud函数获取数据?

来自分类Dev

如何在Google Cloud Datalab中使用Bigquery JSON函数

来自分类Dev

如何将客户端Firebase云消息传递令牌转换为Google Cloud函数?

来自分类Dev

如何在Google Firebase函数中从失败的承诺中返回自定义错误消息?

来自分类Dev

在 Firebase 中,如何获取快照的第一个子项?

来自分类Dev

如何将我在 firebase 云函数中获得的键值对对象的值设置为零(快照)

来自分类Dev

遍历Firebase中的快照子级

来自分类Dev

在Node.js中的Firebase函数中使用Google Cloud Vision Api的PermissionError

来自分类Dev

如何在firebase中添加函数

来自分类Dev

Firebase / Google Cloud Function cron 函数返回 INVALID_ARGUMENT

来自分类Dev

如何从Firebase Firestore快照(React Hooks)获取对象?

来自分类Dev

firebase 云函数快照未定义

来自分类Dev

如何在 Google Cloud 服务器中触发实时数据库字段(不在 Firebase 的功能中)

来自分类Dev

从 Firebase 获取数据 - Google Cloud Functions

Related 相关文章

  1. 1

    如何在Cloud Firestore函数中获取快照的父元素?

  2. 2

    我如何获取数据快照,然后在 firebase 云函数 http 请求中更新数据库

  3. 3

    如何获取Firebase快照的长度?

  4. 4

    在Firebase中使用onUpdate函数时,如何检索返回快照的子级?

  5. 5

    Firebase函数-如何从云函数返回文档快照?

  6. 6

    如何删除快照数据中的 Firebase Cloud Function Push Key?

  7. 7

    Firebase中的快照。如何更深入地了解快照

  8. 8

    Firebase中的快照。如何更深入地了解快照

  9. 9

    如何在Firebase函数中获取DownloadURL

  10. 10

    Firebase Cloud Functions JavaScript - 如何在一个函数中从不同的表中获取多个数据

  11. 11

    如何在 firebase 中手动拍摄多个快照

  12. 12

    如何从firebase数据快照中检索数据

  13. 13

    Firebase中的Cloud Functions:调用参数的类型为文档快照

  14. 14

    如何使用 Cloud Firestore 从颤振中的数据快照中获取特定值?

  15. 15

    如何在Android Google Play服务中创建快照

  16. 16

    如何从Firestore到Google Cloud函数获取数据?

  17. 17

    如何在Google Cloud Datalab中使用Bigquery JSON函数

  18. 18

    如何将客户端Firebase云消息传递令牌转换为Google Cloud函数?

  19. 19

    如何在Google Firebase函数中从失败的承诺中返回自定义错误消息?

  20. 20

    在 Firebase 中,如何获取快照的第一个子项?

  21. 21

    如何将我在 firebase 云函数中获得的键值对对象的值设置为零(快照)

  22. 22

    遍历Firebase中的快照子级

  23. 23

    在Node.js中的Firebase函数中使用Google Cloud Vision Api的PermissionError

  24. 24

    如何在firebase中添加函数

  25. 25

    Firebase / Google Cloud Function cron 函数返回 INVALID_ARGUMENT

  26. 26

    如何从Firebase Firestore快照(React Hooks)获取对象?

  27. 27

    firebase 云函数快照未定义

  28. 28

    如何在 Google Cloud 服务器中触发实时数据库字段(不在 Firebase 的功能中)

  29. 29

    从 Firebase 获取数据 - Google Cloud Functions

热门标签

归档