我正在开发一个firebase函数,该函数从firebase实时数据库中获取一些数据。由于必须从多个节点检索数据,因此我填写了一系列数据库请求承诺。下面是代码:
exports.function = functions.database.ref('/nodeA/{nodeBId}/nodeC/{nodeDId}').onCreate(async (snapshot, context) => {
let userKeysSnapshot = await admin.database().ref(`/nodeA/${nodeBId}/nodeE`).once('value');
let userKeys = Object.keys(userKeysSnapshot.val());
let promises = [];
for (var i = 0; i < userKeys .length; i++) {
console.log("Before push"); // printed in firebase journal
promises.push(admin.database().ref('/users/'+ userKeys [i] + '/node2').once('value')); // <= execution seems to be blocked here
console.log("After push"); // never printed in firebase journal
}
let snapshots = await Promise.all(getDeviceTokensPromises);
...
});
我在push操作周围添加了一些控制台日志,结果是在循环的第一次迭代中我仅获得了第一个日志。此外,在firebase函数日志中,我可以看到函数达到超时。
Firebase日志:
4:56:43.818 PM functionName Function execution took 60003 ms, finished with status: 'timeout'
4:55:44.524 PM functionName Before push
您知道发生了什么吗?