개발관련/other

Deferreds 배열을 $ .when ()에 전달합니다.

Rateye 2021. 6. 14. 10:24
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
반응형