Javascript 谷歌云功能承诺执行和返回

Javascript 谷歌云功能承诺执行和返回,javascript,firebase-realtime-database,google-cloud-functions,es6-promise,Javascript,Firebase Realtime Database,Google Cloud Functions,Es6 Promise,我有一个谷歌云维护功能,我希望运行它来更新Firebase实时数据库。 代码非常简单,但由于某种原因,执行在所有代码运行之前完成。 我怀疑我的等待调用没有按预期处理,因为我没有使用.once() 从Google云功能注销 setUserLimits Function execution started numChildren 4 Process user 1234567890 myPromises lenght 0 Function execution took 416 ms, finished

我有一个谷歌云维护功能,我希望运行它来更新Firebase实时数据库。 代码非常简单,但由于某种原因,执行在所有代码运行之前完成。 我怀疑我的等待调用没有按预期处理,因为我没有使用.once()

从Google云功能注销

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
函数调用后的代码可以在aray的每个元素处理完成之前执行。

您是否尝试过“等待”您的承诺。all()?该函数不必返回任何内容,只需使用try-catch块包装“await-Promise.all()”即可捕获任何错误。您好,Scarysize!对不起,同样的结果/KHi Kolban!这实际上是有道理的,并解释了记录结果。:)然后问题是:如何让代码等待forEach()完成后再继续D/KI怀疑这篇文章可以在你的逻辑中找到答案,你似乎在为数组中的每个元素做“一些事情”。您已经要求通过将forEach回调标记为“async”来异步地执行此“操作”。如果从forEach回调中删除“async”标记,那么回调将同步处理数组中的每个元素,直到每个元素都被寻址,整个forEach才会结束。我的“直觉”是“简单地从forEach回调中删除异步修饰符”。是的!删除“异步”成功了!非常感谢//K
someArray.forEach(async function(element) {
  // do something
});