Credo di avere una domanda relativamente semplice, ma continuo a ragionare e persino Google non mi sta dando una risposta con cui posso lavorare.query WebSQL Javascript all'interno di ciclo. Come sapere quando finito?
Fondamentalmente sto provando a copiare alcuni record che sono memorizzati localmente usando WebSQL. La copia non è un problema, ma ho bisogno di sapere quando tutte le azioni di copia sono terminate prima che il mio programma possa procedere.
Le chiamate WebSQL sono rese asincrone, quindi l'unico modo per me di solito fare queste cose è utilizzando la funzione di callback. Tuttavia, poiché le query vengono eseguite all'interno di un ciclo for, non è possibile utilizzare la funzione di callback poiché verrà attivata alla prima query completata, come mostrato nel codice.
Il codice è il seguente:
function copyRecords(old_parent_id, new_parent_id, callback){
var db = openDatabase('test', '1.0', 'test', 50 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('SELECT * FROM table WHERE parent_id = ?', [old_parent_id], function(tx, results){
for(var i = 0; i < results.rows.length; i++){
db.transaction(function (tx2) {
tx2.executeSql('INSERT INTO table (name, parent_id) VALUES (?, ?)', [results.rows.item(i).name, new_parent_id], callback);
})
}
});
});
}
ho provato anche chiamando la funzione di callback quando i == results.rows.length
, ma questo non mi asure che tutte le query sono stati completati.
Immagino che alcuni di voi abbiano già riscontrato lo stesso problema, quindi qualsiasi aiuto su come risolvere questo problema e assicurarsi che la funzione di callback venga chiamata solo quando il ciclo for è completo è molto apprezzato.
Grazie in anticipo.
E 'fattibile per spostare transacion interna fuori dal ciclo attraverso i risultati, in modo che il ciclo di inserti va dentro la transazione completamente? – Stan