как включить функцию ожидания REST-запросов - PullRequest
0 голосов
/ 08 марта 2019

Я хочу получить массив ключей от JIRA. Текущая функция работает, но когда я вызываю переменную pendingIssues в конце программы, она пуста, так как запрос еще не обработан функцией get_all_issues.

Как изменить функцию ожидания запросов от функции, прежде чем запрашивать pendingIssues.

код:

var pendingIssues = [];

function get_all_issues() {

  console.log("Getting all JIRA issues...");

  var TotalIssues = 1000;
  var count_issue;
  var flag_no_more_issue = 0;


  for (count_issue = 0; count_issue < TotalIssues; count_issue+=50){

    console.log(count_issue);

    //envoi de la requête
    jira.searchJira(searchString = 'project= PITM',
    optional ={
      startAt:count_issue,
      maxResults:50,
      fields:["key"],
      }).then(function(issues) {

      //Ensemble des tickets à traiter
      console.log('--------------------------- ');
      console.log(Date.now());
      var pas;
      for (pas = 0; pas < 50 && flag_no_more_issue != 1 ; pas++){
        if (issues.issues[0] != null){
          pendingIssues.push(issues.issues.pop().key)
          console.log(pendingIssues.length)
          //console.log(pas);
        }
        else{
          var flag_no_more_issue = 1;
          console.log('no more issue !')
        }
      }
      })
      .catch(function(err) {
        console.error(err);
      });
    }
  }


get_all_issues()
console.log('-----------------------------')
console.log(pendingIssues)

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Это из-за асинхронного кода, который вы выполняете.Вам необходимо переместить console.log(pendingIssues) в раздел then (когда ваше Обещание эффективно выполнено).

Или, что еще лучше, вы можете сделать из своей функции get_all_issues Обещание, например:

function get_all_issues() {
  return new Promise(function(resolve, reject) {
     // your JIRA request etc
     ...
     .then(function(issues){
       resolve(issues)
     })
     .catch(function(err){
       reject(err)
     })
  })
}

А затем используйте свое обещание так:

get_all_issues.then(function(pendingIssues){
  console.log(pendingIssues)
})

Вы можете найти информацию о Promise здесь: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise

0 голосов
/ 08 марта 2019

Соберите все запросы в массив и затем вы можете использовать Promise.all (requestArray) .then (...), чтобы выполнить некоторую логику после того, как все обещания будут разрешены.

Это может выглядеть так:

for (count_issue = 0; count_issue < TotalIssues; count_issue+=50){
  pendingIssues.push(
    jira.searchJira(
      'project= PITM',
      {
        startAt:count_issue,
        maxResults:50,
        fields:["key"],
      }).then(function(issues) {

        //Ensemble des tickets à traiter
        console.log('--------------------------- ');
        console.log(Date.now());
        var pas;
        for (pas = 0; pas < 50 && flag_no_more_issue != 1 ; pas++){
          if (issues.issues[0] != null){
            pendingIssues.push(issues.issues.pop().key)
            console.log(pendingIssues.length)
            //console.log(pas);
          }
          else{
            var flag_no_more_issue = 1;
            console.log('no more issue !')
          }
        }
      }).catch(function(err) {
        console.error(err);
      });
    }
  )
}

Promise.all(pendingIssues).then(res => console.log(res))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...