Думаю, у меня есть относительно простой вопрос, но я продолжаю мыслить кругами, и даже 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, очень ценится.
Заранее спасибо.