热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在云函数的循环内设置等待表达式?

这是我的Firebase云功能的简化代码:constadminrequire("..utilitiesfirebase_admin_init

这是我的Firebase云功能的简化代码:

const admin = require("../utilities/firebase_admin_init")
const db = admin.firestore()
exports.crOnDeactivatingExpiredEvents= functions.https.onRequest(async (request,response) => {
const now = new Date()
const OneMonthAgo= moment().subtract(1,"month").toDate()
try {
const expiredEventssnapshot = await eventRef
.where("isactive","==",true)
.where("hasBeenApproved",true)
.where("dateTimeStart",">",oneMonthAgo)
.where("dateTimeStart","<",now)
.get()
const expiredEventIDs = [] // list of IDs here ....
// prepare promises to delete event data in user 'attendedEvents' subcollection.
const deleteAttendedEventsDataPromises = []
for (const eventID of expiredEventIDs) {
const eventAttendeesnapshot = await db.collection("events").doc(eventID).collection("Attendee").get()
const attendeeDocuments = eventAttendeesnapshot.docs
// getting all attendeeIDs.
const attendeeIDs = []
attendeeDocuments.forEach( attendeesnapshot => {
const attendee = attendeesnapshot.data()
attendeeIDs.push(attendee.uid)
})
attendeeIDs.forEach( attendeeID => {
const p = db.collection("users").doc(attendeeID).collection("attendedEvents").doc(eventID).delete()
deleteAttendedEventsDataPromises.push(p)
})
}
// delete event data in user 'attendedEvents' subcollection
await Promise.all(deleteAttendedEventsDataPromises)
console.log(`successfully delete all events data in all attendee user subcollection`)
response.status(200).send(`sucess`)
} catch (error) {
response.status(500).send(error)
}
})

如您在上面看到的那样,循环内有一个await表达式,但是我有一个错误标记,如下图所示,所以我无法部署该函数:

如何在云函数的循环内设置等待表达式?

运行firebase deploy

后出现错误

如何在云函数的循环内设置等待表达式?


  

/Users/muchammadagunglaksana/Documents/kumpul_muslim/cloud_functions_serverless_backend/functions/service/cron_operations.js
  140:43错误await在循环内没有预料不到的循环
  170:41错误“ await”在循环内没有等待循环

  
  

✖2个问题(2个错误,0个警告)

  
  

npm错误!代码ELIFECYCLE npm ERR! errno 1 npm错误!功能@棉绒:
  eslint . npm错误!退出状态1 npm ERR! npm ERR!失败于
  functions @ lint脚本。 npm ERR!这可能不是问题
  npm。上面可能还有其他日志记录输出。

  
  

npm错误!有关此运行的完整日志,请参见:npm ERR!
  /Users/muchammadagunglaksana/.npm/_logs/2019-12-14T10_47_36_788Z-debug.log

  
  

错误:函数预部署错误:命令以非零终止
  退出代码1

我尝试从此处Using async/await with a forEach loop阅读一些解决方案。像这样使用for await

如何在云函数的循环内设置等待表达式?

确实会消失红色错误标记,但是我仍然无法部署该功能。这是我运行firebase deploy

后的错误

如何在云函数的循环内设置等待表达式?


  

functions [cronDeactivatingExpiredEvents(us-central1)]:部署
  错误。加载用户代码时功能失败。错误消息:输入代码
  无法加载文件index.js。您的代码中是否存在语法错误?
  详细的堆栈跟踪:/srv/service/cron_operations.js:138
          for await(algoliaObjectIDs的const eventID){// algoliaObjectIDs与过期的EventID相同
              ^^^^^

  
  

SyntaxError:意外的保留字
      在createScript(vm.js:80:10)
      在Object.runInThisContext(vm.js:139:10)
      在Module._compile(module.js:617:28)
      在Object.Module._extensions..js(module.js:664:10)
      在Module.load(module.js:566:32)
      在tryModuleLoad(module.js:506:12)
      在Function.Module._load(module.js:498:3)
      在Module.require(module.js:597:17)
      在要求时(internal / module.js:11:18)
      在对象。 (/srv/index.js:2:24)

在我使用的.eslintrec.json中:

"parserOptions": {
// Required for certain syntax usages
"ecmaVersion": 2018
},

我是云功能以及后端开发的新手。很抱歉,我的问题太基本了。

我该怎么办?



第一个错误是关于eslint的规则no-await-in-loop,因为操作是串行的,所以不允许循环进行循环,基本上不是并行的,以减少资源和时间的浪费。

您所能做的就是像推销承诺然后Promise.all那样使用它,也可以仅禁用该部分的规则。

/* eslint-disable no-await-in-loop */
for (const eventID of expiredEventIDs) {
const eventAttendeeSnapshot = await db.collection("events").doc(eventID).collection("Attendee").get()
const attendeeDocuments = eventAttendeeSnapshot.docs
....
....
}
/* eslint-enable no-await-in-loop */

第二个错误意味着您忘记将for-await-of包装在async function包装器中,而您使用的是节点版本


推荐阅读
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 本文探讨了在 APICloud 平台使用 execScript 方法时如何正确传递对象参数,并提供了详细的示例和解释。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • 本文详细介绍了如何在 Node.js 环境中利用 Nodemailer 库实现邮件发送功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • 本文探讨了使用lightopenid库实现网站登录,并在用户成功登录后,如何获取其姓名、电子邮件及出生日期等详细信息的方法。特别针对Google OpenID进行了说明。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用流(Stream)进行数据读取与写入,包括创建可读流与可写流的基本方法,并提供了具体的代码示例。 ... [详细]
  • 检查 Kubernetes 系统命名空间中的 Pod 状态时,发现 Metric Server Pod 虽然处于运行状态,但存在异常:日志显示 'it doesn’t contain any IP SANs'。 ... [详细]
author-avatar
卡哇伊--欣欣_749
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有