我是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;
});
});
`
答案 0 :(得分:1)
您的查询没有返回任何结果,并且无限期地等待,直到'child_added'触发以使任何结果变为可用。这导致您的功能超时。
这里有两个错误:
该裁判几乎肯定不是您想要的:“ /user_likes/${UID}/{likedUser}
”
您在其中插入了一个变量($ {UID}),看起来像一个变量插入,但实际上却没有({likedUser})。您正在从字面上看正在搜索一个名为“ {likedUser}”的子节点。我想那不是您想要的。
“增添子级”查询在Cloud Functions中实际上没有任何意义。您永远都不想执行无限期等待结果的查询。您几乎总是想使用“值”事件来获取某个位置的某些数据,如果该位置不存在,则一无所获,因此您的函数可以继续前进并快速执行下一步操作。