Tôi đoán tôi có một câu hỏi đơn giản tương đối, nhưng tôi cứ suy nghĩ trong các vòng kết nối và thậm chí Google không cho tôi câu trả lời mà tôi có thể làm việc cùng.Truy vấn Javascript WebSQL trong vòng lặp. Làm thế nào để biết khi nào kết thúc?
Về cơ bản tôi đang cố sao chép một số bản ghi được lưu trữ cục bộ bằng WebSQL. Sao chép không phải là vấn đề, nhưng tôi cần phải biết khi nào tất cả các hành động sao chép được hoàn tất trước khi chương trình của tôi có thể tiếp tục.
Cuộc gọi WebSQL được thực hiện không đồng bộ nên cách duy nhất để tôi thường làm những việc này là sử dụng chức năng gọi lại. Tuy nhiên, vì các truy vấn được thực hiện trong vòng lặp for, tôi không thể sử dụng hàm gọi lại vì nó sẽ kích hoạt tại truy vấn đầu tiên được hoàn thành như được hiển thị trong mã.
Mã này là như sau:
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);
})
}
});
});
}
Tôi cũng đã thử gọi hàm callback khi i == results.rows.length
, nhưng điều đó không asure tôi rằng tất cả các truy vấn được hoàn thành.
Tôi đoán một số bạn đã gặp phải vấn đề tương tự trước đây, vì vậy bất kỳ trợ giúp nào về cách giải quyết điều này và đảm bảo rằng chức năng gọi lại chỉ được gọi khi vòng lặp hoàn thành được đánh giá cao.
Cảm ơn bạn trước.
Có khả thi để di chuyển transacion trong ra khỏi chu kỳ thông qua các kết quả, do đó chu kỳ của BIG đi bên trong giao dịch hoàn toàn? – Stan