Firebase函数获取密钥名称列表

时间:2019-01-22 23:18:28

标签: node.js firebase firebase-realtime-database google-cloud-functions

我是Nodejs的新手,我试图将其完成2天。我想获取存储在特定节点下的键名列表(喜欢此用户的用户ID)。但是我的代码没有继续执行以下操作: "getting key names for user: NRtRoPEh4HUYUc0Hz6unMCsTBSn1"

然后我的代码超时与此日志:Function execution took 60002 ms, finished with status: 'timeout'

我的代码:

const functions = require('firebase-functions');

const admin = require('firebase-admin');

const serviceAccount = require('./service-account.json');
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: 'MY-URL',
});

var events = require('events');

exports.getLikedUsers = functions.database.ref('/users_to_test/{pushID}').onCreate(snapshot => {
    let UID = snapshot.val();
    let likeList = new Array();
        console.log('getting key names for user: ', UID);


        return admin.database().ref(`/user_likes/${UID}/{likedUser}`)
            .once('child_added').then(snap =>
            {          
                snap.forEach((childSnap) =>{
                    likeList.push(childsnap.key);
                });

                console.log('liked users list: ' + likeList.entries());

                return;

            }).then(function (functionReturn)    
        {
        return;
        });
    });
`


1 个答案:

答案 0 :(得分:1)

您的查询没有返回任何结果,并且无限期地等待,直到'child_added'触发以使任何结果变为可用。这导致您的功能超时。

这里有两个错误:

  1. 该裁判几乎肯定不是您想要的:“ /user_likes/${UID}/{likedUser}” 您在其中插入了一个变量($ {UID}),看起来像一个变量插入,但实际上却没有({likedUser})。您正在从字面上看正在搜索一个名为“ {likedUser}”的子节点。我想那不是您想要的。

  2. “增添子级”查询在Cloud Functions中实际上没有任何意义。您永远都不想执行无限期等待结果的查询。您几乎总是想使用“值”事件来获取某个位置的某些数据,如果该位置不存在,则一无所获,因此您的函数可以继续前进并快速执行下一步操作。