나는 비교적 단순한 질문을 가졌다 고 생각하지만 나는 서클에서 계속 생각하고있다. 심지어 구글도 나에게 내가 할 수있는 대답을주지 않는다.Javascript for 루프 내에서 WebSQL 쿼리. 완료 시점을 아는 방법?
기본적으로 WebSQL을 사용하여 로컬에 저장된 일부 레코드를 복사하려고합니다. 복사가 문제는 아니지만 프로그램을 진행하기 전에 모든 복사 작업이 완료된 시점을 알아야합니다.
WebSQL 호출이 비동기 적으로 처리되므로 일반적으로 이러한 작업을 수행하는 유일한 방법은 콜백 함수를 사용하는 것입니다. 그러나 쿼리는 for 루프 내에서 수행되기 때문에 콜백 함수는 코드에 표시된 것처럼 완료된 첫 번째 쿼리에서 실행되므로 사용할 수 없습니다. 다음과 같이
코드는 다음과 같습니다 나는 또한 콜백 함수 i == results.rows.length
를 호출하려고했지만, 그 모든 쿼리가 완료되는 날 슈어하지 않습니다
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);
})
}
});
});
}
.
여러분 중 일부는 이전에 같은 문제가 발생했습니다. 따라서이 문제를 해결하고 for 루프가 완료되었을 때만 콜백 함수가 호출되도록하는 방법에 대한 도움을 받으십시오.
미리 감사드립니다.
인서트를주기가 완전히 트랜잭션 내에서 이동 있도록이 결과를 통해주기에서 내부 transacion 이동이 가능합니까? – Stan