通过GitHubAPI过滤得到的数据

Filter data obtained through GitHub API

我创建此函数是为了获得 GitHub 个问题:

retrieveEnerpriseIssues: function(repoOrg, repoName, callback) { 
  let data = null;

  // token auth
  octokit.authenticate({
    type: 'basic',
    username: config.githubEnterprise.username,
    password: config.githubEnterprise.token
  });

  async function paginate(method) {
    let response = await method({
      q: "repo:" + repoOrg + "/" + repoName + " is:issue",
      per_page: 100
    });
    data = response.data.items;
    var count = 0;
    while (octokit.hasNextPage(response)) {
      count++;
      console.log(`request n°${count}`);
      response = await octokit.getNextPage(response);
      data = data.concat(response.data.items);
    }
    return data;
  }

  paginate(octokit.search.issues)
    .then(data => {
      callback(data);
    })
    .catch(error => {
      console.log(error);
    });
  }

在这个函数中调用它来解决问题,将所有不需要的键过滤成 json 格式并将其放入我的数据库中。

extractToDb: function() {
  let gitIssues = null;
  for(var i = 0; i < config.githubEnterprise.orgs.length; i++) {
    for(var j = 0; j < config.githubEnterprise.orgs[i].repos.length; j++) {
      gitHubService.retrieveEnerpriseIssues(
        config.githubEnterprise.orgs[i].owner,
        config.githubEnterprise.orgs[i].repos[j].repoName,
        function(data, err) {
          if(err) {
            console.log('err: ', err);
          } else {
            gitIssues = data;
          }
          gitIssues = JSON.stringify(gitIssues);
          gitIssues = JSON.parse(gitIssues);
          let issueFormatForDb = null;
          for(var i = 0; i < gitIssues.length; i++) {
            issueFormatForDb = gitIssues[i];
            const body = '{' +
              '"github_id": "' + issueFormatForDb.id + '",' +
              '"issue_title": "' + issueFormatForDb.title + '",' +
              '"issue_number": "' + issueFormatForDb.number + '",' +
              '"issue_url": "' + issueFormatForDb.url + '",' +
              '"issue_state": "' + issueFormatForDb.state + '"' +  
          '}';
          console.log('Body: ', body);
          getGitHubIssues.postToDb(body);
        }
      });
    }
  }
}

我想更进一步,过滤掉状态已关闭的任何问题。这是如何完成的,应该在我的 retrieveEnerpriseIssues 函数或我的 extractToDb?

中处理吗?

可能的解决方案 我在 extractToDb 函数中尝试了这个:

gitIssues = JSON.parse(gitIssues);
gitIssues = _.where(gitIssues, {state: "open"});
let issueFormatForDb = null;

这是最好的解决方案还是有更好的方法?

正如@givehug 所述:

最好使用 _.filter 或像

这样的原生过滤方法
gitIssues = gitIssues.filter(i => i.state === 'open')

我认为 .where 在 lodash 的更高版本中被弃用了 github.com/lodash/lodash/wiki/Deprecations。除此之外完全没问题。

我刚刚意识到我可以在 paginate 函数中过滤状态:

let response = await method({
    q: "repo:" + repoOrg + "/" + repoName + " is:issue" + " label:issue_label" + " state:open",
    per_page: 100
  });