이것은 달성하려고하는 것입니다.jQuery 지연 및 약속 루프를 사용하여
나는 각각 jQuery에 전달하는 정렬 된 배열을 가지고 있습니다. 각각의 내부에는 원하는 데이터를 가져올 때마다 다른 배열로 푸시 할 아약스 호출이 있습니다 (allJsonData라고 부름). 마지막으로 나는 allJsonData를 표시합니다. 문제는 내가 allJsonData를 표시 할 때마다 요소가 항상 일관성없이 (알파벳순/임의의 순서가 아닌) 표시된다는 것입니다. allJsonData가 사전 순으로 표시되기를 기대하고 있습니다 (AList 데이터를 먼저, BList 데이터를 두 번째로, CList 데이터를 세 번째 등). jQuery를 처음 사용하고 약속했습니다. 미리 감사드립니다.
var sortedArray = [AList, BList, CList, DList];
Promise.all(sortedArray.map(function(value) {
var url = ...;
return getListItems(url);
})).then(function(results) {
// results is an array of results from AList, BList, CList, DList in order
let allJsonData = [];
results.forEach(function(approvedListItems) {
allJsonData.push.apply(allJsonData, approvedListItems.d.results);
});
// process allJsonData here
});
// simplify getListItems like this
getListItems: function(url) {
return $.ajax({
url: url,
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
}
});
},
여기에 일반적인 생각이다 :
var sortedArray = [AList, BList, CList, DList];
var promises = [];
var allJsonData = [];
$.each(sortedArray, function (index, value) {
var dfd = $.Deferred();
var url = _spPageContextInfo.webAbsoluteUrl + ('/_api/Web/Lists/GetByTitle(' + "'" + value + "'" + ')/Items? + "SomeFilterParameters";
//AJAX CALL HERE//
.done(
function (approvedListItems) {
if (approvedListItems.d.results.length != 0) {
$.each(approvedListItems.d.results, function (i, col) {
allJsonData.push(col);//Push into master array
});
}//If closed
dfd.resolve(allJsonData);
}
);//Done closed
promises.push(dfd);
});//jQuery Each closed
return $.when.apply($, promises).promise();
/**** AJAX의 CALL ****/
getListItems: function(url) {
var dfd = $.Deferred();
$.ajax({
url: url,
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: function (data) {
dfd.resolve(data);
},
error: function (error) {
dfd.reject(sender, args, "Error retrieving items");
}
});
return dfd.promise();
},
ajax 호출은 async..hence입니다. 세 번째 요청이 완료되고 배열로 푸시되는 동안 첫 번째 호출되는 호출 시간이 길어질 수 있습니다 ... 따라서 배열 순서의 불규칙성 ... –
수 있습니다. done에서 allJsonData를 정렬하십시오. –
실제 Ajax 호출을 보여주십시오. 최선의 답변을 제공하려면 코드의 해당 부분도 확인해야합니다. – jfriend00