Я разрабатываю функцию 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
У вас есть представление о том, что происходит?