热门标签 | 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包装器中,而您使用的是节点版本


推荐阅读
  • vue使用
    关键词: ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
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社区 版权所有