У меня есть функция обслуживания Google Cloud, которую я хочу запустить sh для обновления базы данных Firebase в реальном времени. Код довольно прост, но по какой-то причине выполнение заканчивается до запуска всего кода. Я подозреваю, что мой ожидающий вызов не обрабатывается должным образом, потому что я неправильно использую .once ()?
exports.setUserLimits = functions
.region('europe-west1')
.database
.ref('/NO-TRIGGER')
.onCreate(async (snapshot, context) => {
let myPromises = []
const userNodeSnap = await database.ref('users').once('value')
console.log('numChildren', userNodeSnap.numChildren())
userNodeSnap.forEach(async (userSnap) => {
console.log('Process user', userSnap.key)
const userData = userSnap.val()
//Set user limits
const limits = {items:10, logins:1}
console.log('New limits', limits)
myPromises.push(userSnap.ref.update({limits}))
})
// Execute all promises
console.log('myPromises lenght', myPromises.length)
return Promise.all(myPromises)
.then(()=>{
return Promise.resolve()
})
.catch((err)=>{
console.error('Could not execute all promises', err)
// Show must go on!
return Promise.resolve()
})
})
Выход из Google Cloud Functions
setUserLimits Function execution started
numChildren 4
Process user 1234567890
myPromises lenght 0
Function execution took 416 ms, finished with status: 'ok'
New limits {items:10, logins:1}
Выполнение завершается преждевременно, что приводит к только одна запись обновляется.
Замена последних строк ниже приводит к тому же результату
await Promise.all(myPromises)
/ K