반응형
jQuery Deferred-여러 AJAX 요청이 완료되기를 기다리는 중
이 질문에 이미 답변이 있습니다.
- Deferreds 배열을 $ .when () 9 답변에 전달
나는 지연된 아약스 호출의 3 계층 딥 체인을 가지고 있으며, 이상적으로는 가장 깊은 계층이 완료 될 때 약속을 끝까지 걷어 낼 것입니다 (저를 Inception의 일로 만듭니다 ... "더 깊이 들어가야합니다!").
문제는 한 번에 많은 ajax 요청 (아마도 수백 개)을 보내고 모든 요청이 완료 될 때까지 연기해야한다는 것입니다. 나는 마지막으로 한 마지막 일을 믿을 수 없습니다.
function updateAllNotes() {
return $.Deferred(function(dfd_uan) {
getcount = 0;
getreturn = 0;
for (i = 0; i <= index.data.length - 1; i++) {
getcount++;
$.when(getNote(index.data[i].key)).done(function() {
// getNote is another deferred
getreturn++
});
};
// need help here
// when getreturn == getcount, dfd_uan.resolve()
}).promise();
};
.when()
, 및 .apply()
여러 지연을 사용할 수 있습니다 . 매우 유용합니다.
function updateAllNotes() {
var getarray = [],
i, len;
for (i = 0, len = data.length; i < len; i += 1) {
getarray.push(getNote(data[i].key));
};
$.when.apply($, getarray).done(function() {
// do things that need to wait until ALL gets are done
});
}
jQuery.When
doc 를 참조하면 ajax 호출 중 하나가 실패하면 이후의 fail
모든 ajax 호출이 아직 완료되지 않은 경우에도 마스터 콜백이 호출됩니다. 이 경우 모든 통화가 완료되었는지 확신 할 수 없습니다.
결과가 무엇이든 모든 호출을 기다리려면 다음과 같이 다른 Deferred를 사용해야합니다.
$.when.apply($, $.map(data, function(i) {
var dfd = $.Deferred();
// you can add .done and .fail if you want to keep track of each results individualy
getNote(i.key).always(function() { dfd.resolve(); });
return dfd.promise();
});
답변 brittohalloran에 감사드립니다. 또한 Underscore를 사용하고 있으므로 다음과 같이 맵을 사용하여 솔루션을 매우 깔끔하게 적용 할 수있었습니다.
$.when.apply($, _.map(data, function(i) {
return getNote(i.key);
})).done(function() {
alert('Be Happy');
});
유용합니다.
반응형
'IT TIP' 카테고리의 다른 글
Android에서 전역 예외 처리 사용 (0) | 2020.12.29 |
---|---|
std :: transform () 및 toupper (), 일치하는 함수 없음 (0) | 2020.12.29 |
루프의 파이썬 목록에서 항목을 제거하는 방법은 무엇입니까? (0) | 2020.12.28 |
TFS에서 특정 사용자의 체크인 기록을 보는 방법은 무엇입니까? (0) | 2020.12.28 |
Android 기기의 CURRENT 방향 (ActivityInfo.SCREEN_ORIENTATION_ *)은 어떻게 얻습니까? (0) | 2020.12.28 |