Обрабатывать значение флага, установленное в getJson, в цикле for, который перебирает каждый URL - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над отчетом, который генерирует URL-адреса отчетов Diff каждый день (с 2016 года) Я анализирую эти отчеты (в JSON), чтобы найти некоторую строку, которая указывает на регрессию, и пометить флаг (regressionFound = true) в JS. Затем я использую этот флаг в HTML-коде, чтобы отобразить текст «Регрессия найдена» для регрессии того дня

Проблема для всех отчетов, независимо от того, показывает ли это регрессию как regressionFound = false. Я предполагаю, что это из-за асинхронности getJSON. Любая работа вокруг этого?

    for (var j=0; j<reports.length; j++) {
       // some code
      var ReportPath = buildURL(j);
      regressionFound = false
      (function(url) {
          $.getJSON(url, function (data) {
            if (some condition //regression found) {
                regressionFound = true;
            }      
         });
      })(ReportPath);
    }

1 Ответ

0 голосов
/ 13 ноября 2018

Рассмотрите возможность создания массива обещаний запроса и используйте $.when() или Promise.all() для запуска кода после завершения всех запросов.С каждым запросом вы можете добавить свойство regressionFound к каждому объекту отчета

var requests = reports.map(function(report, i){
   return $.getJSON(buildURL(i)).then(function (data){
       report.regressionFound = // conditional
   });    
});

$.when.apply(null, requests).then(function(){
   // all requests completed and report objects are updated
   // loop over reports and modify html
})
...