javascript中针对循环的异步调用不起作用
我在循环中有一个回调函数,用于(结果中的var res){ 但是循环似乎没有等待异步调用。当我在这里调用self.callTestOutputData(test_output_url)时,循环没有等待响应,而是继续进行下一次迭代,我丢失了要推入obj.requestion_number=testOutputResponse.value的值; 请注意:var results=response.results这里results是一个Json对象数组。 编辑1:我试过forEach,但没用javascript中针对循环的异步调用不起作用,javascript,jquery,Javascript,Jquery,我在循环中有一个回调函数,用于(结果中的var res){ 但是循环似乎没有等待异步调用。当我在这里调用self.callTestOutputData(test_output_url)时,循环没有等待响应,而是继续进行下一次迭代,我丢失了要推入obj.requestion_number=testOutputResponse.value的值; 请注意:var results=response.results这里results是一个Json对象数组。 编辑1:我试过forEach,但没用 resul
results.forEach(res => {
var obj = {}
obj.ferp = res.name;
// your code...
})
原始代码:
self.downloadDailyExcelProcurement = function (filters, excelTmpArr) {
self.disableExcelDownloadProcurement(true);
$('.useCaseExcelButtonProcurement .oj-button-button .oj-button-label')[0].style.backgroundColor = "gray";
$('.useCaseExcelButtonProcurement .oj-button-button .oj-button-label .demo-download-icon-24')[0].style.color = "#D8D8D8";
var payload = {};
if (typeof filters === "string") {
var fill = filters;
} else {
var fill = self.sendFilters();
if(self.app() === "fusion"){
fill += '&module=Procurement';
}else if (self.app() === "o2r"){
fill += '&module=O2r';
}
}
if(fill.includes("%3A")){
fill = fill.replace(/%3A/g, ':');
}
payload.Endpoint = 'executions/testcollection/' + fill;
//console.log(payload.Endpoint)
payload.BeforeSend = function (xhr) {
xhr.setRequestHeader('Authorization', 'Basic ' + btoa('guest:oracle123'));
$(".custom-loader-circle").show();
};
payload.OnSuccess = function (response) {
var results = response.results;
for (var res in results) {
var obj = {}
obj.ferp = results[res].name;
obj.po = "NA"
obj.receipt_no = "NA"
var test_output_url = results[res].reference_test_cases[0].automation_tests[0].test_outputs[0]
$.when(self.callTestOutputData(test_output_url)).done(function (testOutputResponse) {
if(testOutputResponse)
obj.requistion_number = testOutputResponse.value;
else {
obj.requistion_number = "NA";
}
self.excelTmpArr().push(obj);
});
}
else {
self.excelTmpArr().push(obj);
}
}
if (response.next) {
filters = ((response.next).split('testcollection'))[1];
if (filters[0] === "/") {
var test = filters.slice(1, filters.length);
}
self.downloadDailyExcelProcurement(test, self.excelTmpArr());
} else {
if (results.length === 0) {
$(".custom-loader-circle").hide();
self.disableExcelDownloadProcurement(false);
$('.useCaseExcelButtonProcurement .oj-button-button .oj-button-label')[0].style.backgroundColor = "#4d0000";
$('.useCaseExcelButtonProcurement .oj-button-button .oj-button-label .demo-download-icon-24')[0].style.color = "white";
showMessage(self.messages, "No Data to Download", '', 'info');
} else {
self.formatForExcel(self.excelTmpArr(), fill, "Procurement");
}
}
};
payload.OnError = function (data) {
showMessage(self.messages, data.status, data.statusText, 'error');
$(".custom-loader-circle").hide();
};
getData(payload);
}
使用forEach()进行迭代,因为它会创建自己的函数闭包:
results.forEach(res=>{
var obj={}
obj.ferp=res.name;
//你的代码。。。
})
var results=response.results;
如果(result.length>0){
结果.map((数据、索引)=>{
//在这里编写代码
})
}
尝试使用异步并等待:
async function asyncCall () {
// call here
}
for (var res in results) {
const response = await asyncCall();
}
检查此项:。我在这里得到一个错误:Uncaught TypeError:无法读取obj.ferp=results[res]处未定义的属性'name'。名称;不,我尝试这样做:payload.OnSuccess=function(response){var results=response.results;results.forEach(res=>{var obj={};obj.ferp=res.name;//更多代码,但它没有工作答案更新;修改此行:obj.ferp=res.name;,我仅在上一条注释中尝试了这一点,但它没有工作。尝试console.log(res.name),您得到了正确的值吗?