比較的簡単な質問があると思いますが、私は輪になって考え続けており、Googleでさえ私が取り組むことができる答えを私に与えていません。
基本的に、WebSQLを使用してローカルに保存されているいくつかのレコードをコピーしようとしています。コピーは問題ではありませんが、プログラムを続行する前に、すべてのコピーアクションがいつ終了するかを知る必要があります。
WebSQL呼び出しは非同期で行われるため、通常これらのことを行う唯一の方法は、コールバック関数を使用することです。ただし、クエリはforループ内で実行されるため、コードに示されているように、最初に完了したクエリで起動するため、コールバック関数を使用できません。
コードは次のとおりです。
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);
})
}
});
});
}
のときにコールバック関数をi == results.rows.length
呼び出そうとしましたが、すべてのクエリが完了したことを保証するものではありません。
以前に同じ問題が発生したことがあると思います。そのため、これを解決し、forループが完了したときにのみコールバック関数が呼び出されるようにする方法についてのヘルプをいただければ幸いです。
前もって感謝します。