如何将长超时API调用拆分为较小的调用

如何将长超时API调用拆分为较小的调用,api,cron,fetch,serverless,vercel,Api,Cron,Fetch,Serverless,Vercel,我有一个API js文件,它由cronjob通过curl GET调用 这个js文件基本上通过await-fetch查询外部API,并通过await>将响应中的一些数据保存到Mongodb上。。updateOne。问题是,对于大约500个不同的值,这种情况在循环中发生,需要10秒以上才能完成,而对于无服务器函数,我的服务器超时限制是10秒 那么,如何将其拆分为多个“GET”请求呢? 在API js文件中执行for循环不是同样的,因为它仍然作为一个操作计算吗 每次我通过不同的关键词搜索这个,它都会发

我有一个API js文件,它由cronjob通过curl GET调用

这个js文件基本上通过
await-fetch
查询外部API,并通过
await>将响应中的一些数据保存到Mongodb上。。updateOne
。问题是,对于大约500个不同的值,这种情况在循环中发生,需要10秒以上才能完成,而对于无服务器函数,我的服务器超时限制是10秒

那么,如何将其拆分为多个“GET”请求呢? 在API js文件中执行
for循环
不是同样的,因为它仍然作为一个操作计算吗


每次我通过不同的关键词搜索这个,它都会发现我不相关的东西,我是不是遗漏了什么?也许很少发现这样的情况?我对cronjob/serverless函数一无所知,如果这不是一个合适的地方,请告诉我应该在stackexchange的哪个位置发布它,有两种可能的解决方案:

  • 蛮力方法是增加,您可以通过
    serverless.yml
    provider
    部分或直接在函数定义中执行此操作。(900秒或15分钟。)(与Vercel不相关,企业版为900秒,专业版为60秒,免费版为10秒。)
  • 在Lambda函数中执行for循环不会有太大变化。如果可以将其分解为多个cron作业,则可以对其进行参数化。例如,想象一个cron作业,它通过员工列表每天进行一些处理。您可以将cron作业更改为接受按姓氏过滤员工列表的一系列字母。因此,您不需要执行一个cron任务,而需要执行四个:A-F、G-M、N-S和T-Z(在您的示例中,尝试找到一个参数,将500个值拆分为大小相等的存储桶)

由于使用serverless(至少使用AWS)时,您会收到持续时间和内存消耗的账单,因此拆分它可能没有多大意义,因此增加超时设置可能是更容易的解决方案,但我不知道您的完整上下文,所以这只是一个猜测。

关于您提到的超时设置,你指的是什么服务?我的服务器现在在Vercel上,按照免费计划,他们只允许cron操作最高10秒。哦,我以为你在使用。然后,超时会以我描述的方式增加,这不适用,您需要将调用拆分为多个cron作业。我正在考虑根据建议的拆分方法,使用GET-like http:../myjsfile.js?letter=a-d创建多个cron,然后在myjsfile.js中检查?=params,从数据库中查询所有500,然后仅对以a、b、c和染料开头的名称进行API调用,如果可能,甚至尝试避免从数据库中获取所有500,并根据您发送的
param
仅选择相关的名称,例如在本例中仅选择
a-d
名称(但这在很大程度上取决于数据库模式的外观等等)。