ho questo codice:ottenere i dati di funzione asincrona
function getData(){
db.transaction(function(tx){
tx.executeSql('SELECT * from q', [], function(tx, result){
var q = [];
for (var i=0; i < result.rows.length; i++) {
q.push(result.rows.item(i));
};
console.log(q.length); // 3
returnData(q);
});
});
}
function returnData(data){
console.log(data.length); // 3
return data;
}
var q = getData(); // undefined
e non funzionano come previsto (ma non restituisce nulla). Un presupposto che è accaduto, perché db.transaction
funziona in modo asincrono, ma sto usando la funzione callback per restituire i dati. Qualcuno può spiegare perché non funziona e come risolverlo?
quindi, non c'è modo, per mettere quell'array in una variabile fuori dalla funzione asincrona? – nukl
@nukl: è possibile assegnare i valori alle variabili in qualsiasi ambito superiore (ad esempio a variabili globali), ma ciò non è di aiuto. Il punto importante quando si usano le callback è * quando * si accede ai dati. Se si accede alla variabile * prima * la richiamata è stata eseguita (e il valore è stato impostato), si ottiene un errore o nessun dato. Esistono casi d'uso perfettamente validi per assegnare la risposta ad altre variabili, al di fuori del callback, ma è necessario essere consapevoli delle implicazioni di effettuare chiamate asincrone. –
@nukl, a meno che non vogliate usare CoffeeScript (un linguaggio compilato da to-javascript): http://jashkenas.github.com/coffee-script/ –