Octokit:无法创建多重标签 代码示例:我想做什么:问题:澄清

问题描述

无法创建多个标签

代码示例:

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 插件时遇到问题,请在这些存储库中打开一个问题,创建者和其他贡献者在那里非常活跃。