代码之家  ›  专栏  ›  技术社区  ›  DeveloperKurt

firebase函数获取密钥名称列表

  •  0
  • DeveloperKurt  · 技术社区  · 6 年前

    我刚接触Nodejs,我想做两天。我想获取存储在特定节点下的密钥名列表(这是喜欢此用户的用户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 回复  |  直到 6 年前
        1
  •  1
  •   Doug Stevenson    6 年前

    您的查询没有返回任何结果,并且将无限期地等待“child-added”激发任何结果。这会导致您的函数超时。

    这里有两个问题:

    1. 这个参考几乎肯定不是你想要的:“ /user_likes/${UID}/{likedUser} “ 这里插入了一个变量($uid),还有一个看起来像变量插入,但实际上不是(likedUser)。你是 字面 正在搜索名为“likedUser”的子节点。我想那不是你想要的。

    2. “child_added”查询在云功能中没有真正意义。你不 曾经 希望执行无限期等待结果的查询。您几乎总是希望使用“值”事件来获取某个位置的某些数据,或者如果该位置不存在,则不需要任何数据,因此您的函数可以继续运行并快速执行下一步操作。