gpt4 book ai didi

javascript - Google Cloud Functions Promises 执行并返回

转载 作者:行者123 更新时间:2023-12-02 21:12:12 25 4
gpt4 key购买 nike

我有一个 Google Cloud 维护功能,希望运行它来更新 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

最佳答案

如果我们看一下这段代码:

  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}))
})

我们看到它具有逻辑形式:

someArray.forEach(async function(element) {
// do something
});

基本上,forEach 函数调用之后的代码可以在完成数组每个元素的处理之前执行。

关于javascript - Google Cloud Functions Promises 执行并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61060828/

25 4 0
文章推荐: javascript - 如何将页面模板拆分为单独的组件,每个组件都查询数据?
文章推荐: javascript - React js,如何在输入更改时更新状态对象值?
文章推荐: javascript - Bootstrap 和 JS - 如何在有限的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com