问题描述
无法创建多个标签
代码示例:
Promise.all(
srcRepoReq.data.map(async (label) => {
const newLabel: ghLabel = {
name: label.name,color: label.color,description: label.description,};
const createLabelReq = await octokit.request('POST /repos/{username}/{trgtRepo}/labels',{
username: cfg.username,trgtRepo: cfg.trgtRepo,name: newLabel.name,color: newLabel.color,description: newLabel.description,});
Terminal.writeInfo(createLabelReq.status);
Terminal.writeInfo(newLabel.name);
})
);
我想做什么:
我想使用 GitHub 的 @octokit/core
API 客户端创建多个标签。
问题:
所有这些承诺似乎都没有被执行。我不会从这两个 Terminal.*
方法中获得任何文本。
回购中也没有标签出现。但是如果我在 Promise.all(srcRepoReq.data.map(...));
之外执行代码,它工作得很好并且标签正在创建。但是我必须手动执行每个请求并将它们硬编码到代码中。这不是我想做的。我想基于元素数组创建标签。
类型:
type ghLabel = {
name: string;
color: string;
description: string;
};
这包含 GitHub API 创建标签所需的所有数据。
这可能是因为 GitHub 端的一些限制吗?每个 <number>
仅 <time>
的请求?
澄清
是的。类型是正确的。我已经验证过了。
任何解决方案?
解决方法
正如您所提到的,滥用率限制可能是您遇到问题的根本原因。您是否尝试过 catch
为什么 Promise.all
无法获得更多信息?我们在谈论多少个存储库(或多或少)?
如果您发现自己达到了 API 的限制,我建议您尝试使用 Throttling Octokit 的插件 (@octokit/plugin-throttling)。
另外,作为额外的一点,我邀请您研究一下 Octoherd(来自 Octokit 的创建者)。它为您提供了 create-script-utility 来对存储库执行大量任务,就像您在这里使用标签所做的那样。
如果您在运行 Octoherd 或 Octokit 插件时遇到问题,请在这些存储库中打开一个问题,创建者和其他贡献者在那里非常活跃。