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


推荐阅读
  • 本文探讨了如何解决在使用CoffeeScript定义类时,实例化后对象为空的问题,并提供了解决方案。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
  • 使用Gulp进行前端资源压缩
    本文探讨了如何利用Gulp这一强大的自动化构建工具,通过集成各种第三方插件来实现JavaScript、CSS和HTML等前端资源的高效压缩,以提升网站性能。 ... [详细]
  • 我正在使用Firebase作为群组协作应用程序(如Whatsapp),我正在使用云功能来确定哪些手机通讯录也在使用我的应用程序(再次类似于Whatsapp).云函数运行正常,直到我 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文探讨了如何在Node.js环境中,通过Tor网络使用的SOCKS5代理执行HTTP请求。文中不仅提供了基础的实现方法,还介绍了几种常用的库和工具,帮助开发者解决遇到的问题。 ... [详细]
  • Node.js 入门指南(一)
    本文介绍了Node.js的安装步骤、如何创建第一个应用程序、NPM的基本使用以及处理回调函数的方法。通过实际操作示例,帮助初学者快速掌握Node.js的基础知识。 ... [详细]
  • 本文详细介绍了如何在Linux系统中安装和配置Node.js,包括从官方下载、编译安装到运行基本示例的全过程。 ... [详细]
  • Node.js中子进程的创建与管理详解
    本文深入探讨了Node.js中如何使用child_process模块来创建和管理子进程,包括exec、spawn和fork三种方法的具体应用及其实现细节。 ... [详细]
  • 需求分析是软件生命周期中相当重要的一个阶段。根据StandishGroup对23000个项目进行的研究结果表明,28%的项目彻底失败,46%的项目超出经费预算或者超出 ... [详细]
  • 我想知道为什么,两次如何工作,如何 ... [详细]
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社区 版权所有