Ho tre funzioni che sto cercando di eseguire, le prime due stanno facendo alcune cose asincrone che necessitano di dati per il terzo da utilizzare. Voglio che la terza funzione venga attivata solo quando 1 e 2 sono entrambi eseguiti. questa è la struttura generale ma la funzione finale sta sparando prima della 1 e 2 fine.jquery funzioni differite personalizzate
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
}
}
risposta è stata di non chiamare la costruzione di dati immediatamente
$.when(first(), second()).done(constructData);
non chiamare i dati di costruzione ha fatto immediatamente il trucco grazie! – Brian
wow, non sapevo che la funzione possa essere scritta all'interno dell'oggetto posticipato in questo modo, grazie! – Denis
@Denis Non penso che sia il modo corretto di farlo. Secondo jQuery [docs] (https://api.jquery.com/jquery.deferred/): Il parametro 'beforeStart' è _" una funzione chiamata appena prima che il costruttore ritorni. "_. Quindi quella funzione viene chiamata prima che venga creato l'oggetto posticipato. –