Node.js中的ClickUp API Promise.all()vs for loop with await

jv2fixgn  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(148)

我想批量删除ClickUp上的所有文件夹:
下面是删除单个文件夹的函数:

  1. async function deleteFolder(folderID) {
  2. try {
  3. await clickup.delete(`folder/${folderID}`);
  4. logger.log(
  5. "info",
  6. `DELETE folder: ${folderID} - Folder deleted successfully`
  7. );
  8. } catch (error) {
  9. logger.log(
  10. "error",
  11. `DELETE request to https://api.clickup.com/api/v2/folder/${folderID} failed. Error message: ${error.message}`
  12. );
  13. }
  14. }

下面是删除所有文件夹的函数:

  1. async function deleteAllFolders() {
  2. const teamID = await getWorkspaces();
  3. const spaceID = await getSpaces(teamID);
  4. const allFolders = await getFolders(spaceID);
  5. const promises = allFolders.folders.map(async (folder) =>
  6. deleteFolder(folder.id)
  7. );
  8. await Promise.all(promises);
  9. }

此函数使用Promise.all()。当我调用这个函数时,只有一些文件夹被删除。哪些文件夹被删除似乎是随机的。我得到一个500错误的一些文件夹。
下面是我得到的错误日志:

  1. {"level":"error","message":"DELETE request to https://api.clickup.com/api/v2/folder/90110574307 failed. Response code: 500, response message: Request failed with status code 500","timestamp":"2023-10-08T18:35:39.431Z"}

然而,当我在await中使用for循环时,一切都很好:

  1. async function deleteAllFolders() {
  2. const teamID = await getWorkspaces();
  3. const spaceID = await getSpaces(teamID);
  4. const allFolders = await getFolders(spaceID);
  5. for (const folder of allFolders.folders) {
  6. await deleteFolder(folder.id);
  7. }
  8. }

为什么for循环能像预期的那样工作,而Promise.all()版本却不能?它是否与速率限制有关,因为Promise.all()做并发请求。ClickUp API限制为每分钟100个请求(在免费计划中)。但我最多只删除6个文件夹。
任何帮助都是感激不尽的。

cuxqih21

cuxqih211#

ClickUp API的速率限制为每分钟100个请求,然后通过使用Promise.all()函数,您可以对所有文件夹进行并发请求。
这是我的示例代码。

  1. const deleteAllFolders = async () => {
  2. const teamID = await getWorkspaces();
  3. const spaceID = await getSpaces(teamID);
  4. const allFolders = await getFolders(spaceID);
  5. const promises = allFolders.folders.map(async (folder) => {
  6. await new Promise((resolve) => setTimeout(resolve, 6000)); // Delay for 6 seconds
  7. return deleteFolder(folder.id);
  8. });
  9. await Promise.all(promises);
  10. }

相关问题