处理在for循环下的getJson下设置的标志值,该标志值遍历每个URL

时间:2018-11-12 23:49:01

标签: javascript getjson

我正在研究一个每天生成差异报告URL的报告(自2016年起) 我解析这些报告(在JSON中)以找到一些指示回归的字符串,并在JS中标记一个标志(regressionFound = true)。然后,我将在HTML代码中使用此标志,以将当天的回归显示为“发现回归”

问题在于所有报告是否都显示回归显示为gressionFound = 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 :(得分:0)

考虑创建请求承诺数组,并在所有请求完成后使用$.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
})