Mam trzy funkcje, które próbuję uruchomić, pierwsze dwa robią pewne asynchroniczne rzeczy, które potrzebują danych dla trzeciej osoby. Chcę, aby trzecia funkcja strzelała tylko wtedy, gdy 1 i 2 zostały wykonane. jest to ogólna struktura, ale ostatnia funkcja odpala przed 1 i 2.niestandardowe funkcje odroczone 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
}
}
odpowiedzi nie było nazwać skonstruować dane natychmiast
$.when(first(), second()).done(constructData);
nie wywoływanie danych konstrukcyjnych natychmiast wykonało lewę dzięki! – Brian
Wow, nie wiedziałem, że funkcja ta może być zapisana wewnątrz obiektu odroczonego w ten sposób, dzięki! – Denis
@Denis Nie sądzę, że to właściwy sposób robienia tego. Zgodnie z jQuery [docs] (https://api.jquery.com/jquery.deferred/): Parametrem 'beforeStart' jest _" funkcja, która jest wywoływana tuż przed powrotem konstruktora. "_. Funkcja ta jest wywoływana przed utworzeniem obiektu odroczonego. –