我正在研究一个每天生成差异报告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);
}
答案 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
})