728x90
반응형
질문 : Deferreds 배열을 $ .when ()에 전달합니다.
다음은 무슨 일이 일어나고 있는지에 대한 인위적인 예입니다. http://jsfiddle.net/adamjford/YNGcm/20/
HTML :
<a href="#">Click me!</a>
<div></div>
자바 스크립트 :
function getSomeDeferredStuff() {
var deferreds = [];
var i = 1;
for (i = 1; i <= 10; i++) {
var count = i;
deferreds.push(
$.post('/echo/html/', {
html: "<p>Task #" + count + " complete.",
delay: count
}).success(function(data) {
$("div").append(data);
}));
}
return deferreds;
}
$(function() {
$("a").click(function() {
var deferreds = getSomeDeferredStuff();
$.when(deferreds).done(function() {
$("div").append("<p>All done!</p>");
});
});
});
"모두 완료!" 모든 지연된 작업이 완료된 후에 표시되지만 $.when()
은 지연된 개체의 배열을 처리하는 방법을 알지 못하는 것 같습니다. "모두 완료되었습니다!" 배열이 Deferred 객체가 아니기 때문에 먼저 발생하므로 jQuery는 계속 진행하여 방금 완료되었다고 가정합니다.
$.when(deferred1, deferred2, ..., deferredX)
와 같은 함수에 개체를 전달할 수 있다는 것을 알고 있지만 해결하려는 실제 문제에서 실행될 Deferred 개체 수는 알 수 없습니다.
답변
일반적으로 그들이 사용, 별도의 매개 변수로 기대하는 모든 기능에 값의 배열을 전달하려면 Function.prototype.apply
그래서 당신이 필요,이 경우 :
$.when.apply($, my_array).then( ___ );
http://jsfiddle.net/YNGcm/21/ 참조
...
스프레드 연산자를 대신 사용할 수 있습니다.
$.when(...my_array).then( ___ );
.then
핸들러에 필요한 형식 매개 변수의 수를 미리 알 수 없기 때문에 해당 핸들러는 각 promise의 결과를 검색하기 위해 arguments
출처 : https://stackoverflow.com/questions/5627284/pass-in-an-array-of-deferreds-to-when
728x90
반응형
'개발관련 > other' 카테고리의 다른 글
Assert를 사용하여 예외가 발생했는지 확인하는 방법 (0) | 2021.06.16 |
---|---|
Node.js를 사용하여 현재 스크립트의 경로를 얻는 방법 (0) | 2021.06.16 |
Node.js의 디렉토리에있는 모든 파일의 이름 목록을 얻는 방법 (0) | 2021.06.14 |
파일의 전체 경로에서 디렉토리를 가져 오는 방법 (0) | 2021.06.13 |
'Microsoft.ACE.OLEDB.12.0'공급자가 로컬 컴퓨터에 등록되지 않았습니다. (0) | 2021.06.13 |