我是 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;
});
});
`
您的查询未返回任何结果,并且无限期地等待,直到"child_added"触发任何结果可用。 这会导致函数超时。
这里有两点错误:
-
这个参考几乎肯定不是你想要的:"
/user_likes/${UID}/{likedUser}
"你在那里插入了一个变量(${UID}),另一个看起来像变量插入,但实际上不是({likedUser})。 您实际上是在搜索一个名为"{likedUser}"的子节点。 我想这不是你想要的。 -
"child_added"查询在云函数中没有真正的意义。 您永远不想执行无限期等待结果的查询。 您几乎总是希望使用"value"事件来获取某个位置的一些数据,或者如果该位置不存在则什么都不获取,因此您的函数可以快速移动并执行下一件事。