Фильтровать данные, полученные через 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;

Это лучшее решение или есть способ лучше?

Лучше использовать _.filter или собственный метод фильтрации, такой как gitIssues = gitIssues.filter(i => i.state === 'open'), я думаю .where устарел в более поздних версиях lodash github.com/lodash/lodash/wiki/Deprecations. В остальном это прекрасно.

givehug 13.09.2018 19:55
1
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как заявил @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
  });

Другие вопросы по теме