실행하려고하는 세 가지 함수가 있습니다. 첫 번째 두 함수는 세 번째 함수에 대한 데이터가 필요한 비동기식 작업을 수행하고 있습니다. 1과 2가 모두 완료 될 때만 세 번째 함수가 실행되기를 원합니다. 이것은 일반적인 구조이지만 1과 2가 끝나기 전에 마지막 함수가 실행됩니다. return d.promise();
:jquery 사용자 정의 지연 함수
function run() {
var data1 = {};
var data2 = {};
$.when(first(), second()).done(constructData());
function first() {
var d = new $.Deferred();
//do a bunch of stuff async
data1 = {};
d.resolve();
}
function second() {
var d = new $.Deferred();
//do a bunch of stuff async
data2 = {};
d.resolve();
}
function constructData() {
//do stuff with data1 and data2
}
}
답변 데이터 당신이 first()
을해야하고 약속을 반환 second()
생각 즉시
$.when(first(), second()).done(constructData);
은 구조 데이터를 호출하지 않고 바로 트릭을했습니다! – Brian
와우, 지연된 객체 내부에이 함수를 쓸 수 있다는 것을 몰랐습니다. 감사합니다! – Denis
@ 데니스 나는 그것을하는 적절한 방법이라고 생각하지 않습니다. jQuery [docs] (https://api.jquery.com/jquery.deferred/)에 따르면 : beforeStart' 매개 변수는 "생성자가 반환하기 바로 전에 호출되는 함수입니다."_. 그래서이 함수는 지연된 객체가 생성되기 전에 호출됩니다. –