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

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

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

async function deleteFolder(folderID) {
  try {
    await clickup.delete(`folder/${folderID}`);

    logger.log(
      "info",
      `DELETE folder: ${folderID} - Folder deleted successfully`
    );
  } catch (error) {
    logger.log(
      "error",
      `DELETE request to https://api.clickup.com/api/v2/folder/${folderID} failed. Error message: ${error.message}`
    );
  }
}

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

async function deleteAllFolders() {
  const teamID = await getWorkspaces();
  const spaceID = await getSpaces(teamID);
  const allFolders = await getFolders(spaceID);

  const promises = allFolders.folders.map(async (folder) =>
    deleteFolder(folder.id)
  );

  await Promise.all(promises);
}

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

{"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循环时,一切都很好:

async function deleteAllFolders() {
  const teamID = await getWorkspaces();
  const spaceID = await getSpaces(teamID);
  const allFolders = await getFolders(spaceID);

  for (const folder of allFolders.folders) {
    await deleteFolder(folder.id);
  }
}

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

cuxqih21

cuxqih211#

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

const deleteAllFolders = async () => {
  const teamID = await getWorkspaces();
  const spaceID = await getSpaces(teamID);
  const allFolders = await getFolders(spaceID);

  const promises = allFolders.folders.map(async (folder) => {
    await new Promise((resolve) => setTimeout(resolve, 6000)); // Delay for 6 seconds    
    return deleteFolder(folder.id);
  });

  await Promise.all(promises);
}

相关问题