我正在努力與Phonegap/Cordova的錯誤。我建立和連接設備中測試我的應用程序,這是我得到的錯誤:使用webSQL(SQLite)phonegap代碼有問題的承諾
INVALID_STATE_ERR:DOM異常11
無我發現作品的解決方案。他們中的大多數都旨在使用ajax,而這裏並不是這種情況。我發現了另一個關於phonegap的問題,他們說這可能是因爲該設備還沒有準備好,但我已經檢查過我的設備。
這是在錯誤被拋出(我使用的是無極填充工具BTW,因爲它不是在科爾多瓦支持到目前爲止)的代碼:我懷疑它可能有一些做
/**
* Clients insertion
* @param tx
* @param clientes
* @return {Promise}
*/
clientes = function(clientes) {
return new Promise(function(resolve, reject) {
var clientesCount = clientes.length;
if (clientesCont === 0){
resolve();
}
else {
APP.db.transaction(function(tx) {
$.each(clientes, function(i, cliente) {
var idclienteLocal;
// Current client
tx.executeSql("INSERT OR REPLACE INTO clientes (id, name, ...) " +
"VALUES " +
"(?,?,...)",
[cliente.id, cliente.name],
function(tx, res) {
clientesCount--;
idclienteLocal = res.insertId;
// Clien phones
telefonosCliente(tx, cliente, idclienteLocal).then(function() {
// Client credits
creditosCliente(tx, cliente, idclienteLocal).then(function() {
if (clientesCount === 0) {
resolve();
}
}).catch(function(error) {
reject('Error créditos cliente ' + cliente.empresa + ': ' + error);
});
}).catch(function(error) {
reject('Error teléfonos cliente ' + cliente.empresa + ': ' + error);
});
}, function(tx, error) {
reject(error.message);
});
});
});
}
});
}
循環(我爲此使用jQuery),所以我嘗試使用遞歸函數對前一個迭代進行排序,但它甚至不能在瀏覽器中工作(第一個處理器中的PromiseClient ()調用,在clientes()內不會解決)。這裏是修改後的代碼:
/**
* Recursive function to process each client one after the other
* @param tx
* @param clientes
* @param cliente
* @return {Promise}
*/
procesarCliente = function(tx, clientes, cliente) {
return new Promise(function(resolve, reject) {
// Current client
tx.executeSql("INSERT OR REPLACE INTO clientes (id, name, ...) " +
"VALUES " +
"(?,?,...)",
[cliente.id, cliente.name,...],
function(tx, res) {
var idclienteLocal = res.insertId;
// Client phones
telefonosCliente(tx, cliente, idclienteLocal).then(function() {
// Client credits
creditosCliente(tx, cliente, idclienteLocal).then(function() {
if (clientes.length === 0) {
resolve();
}
else {
procesarCliente(tx, clientes, clientes.shift());
}
}).catch(function(error) {
reject('Error créditos cliente ' + cliente.empresa + ': ' + error);
});
}).catch(function(error) {
reject('Error teléfonos cliente ' + cliente.empresa + ': ' + error);
});
}, function(tx, error) {
reject(error.message);
});
});
},
/**
* Clients insertion
* @param tx
* @param clientes
* @return {Promise}
*/
clientes = function(clientes) {
return new Promise(function(resolve, reject) {
var cliente,
clientesCont = clientes.length;
if (clientesCont === 0){
resolve();
}
else {
APP.db.transaction(function(tx) {
cliente = clientes.shift();
procesarCliente(tx, clientes, cliente).then(function() {
resolve();
}).catch(function(error) {
reject(error);
});
});
}
});
}
有關修復第二種方法的任何幫助,最重要的是如何讓它在phonegap中工作?
編輯
我添加了一個驗證碼檢查每個本地數據庫中的表,而且奇怪的是,它apparenntly只創建兩個表名爲「不確定」和「項目」(我不」即使使用這樣的表格)。
的驗證碼在這裏:
if (APP.DEBUG) { // this is true
// Verify inserted data when triggered event 'app.load.all' just after the very last item in the DB has been inserted
$wrapper.on('app.load.all', function() {
APP.db.transaction(function(tx) {
console.log('Verifying DB');
tx.executeSql("SELECT name FROM sqlite_master WHERE type='table'", [],
function(tx, res) {
if (res.rows.length) {
$.each(res.rows, function(i, tabla) {
if (tabla.name !== '__WebKitDatabaseInfoTable__') {
console.log('Verifying table ' + tabla.name);
tx.executeSql("SELECT * FROM " + tabla.name, [],
function(tx, res) {
console.log("Table " + tabla.name + " has " + res.rows.length + " records");
},
function(tx, error) {
console.log('Error verifying table ' + tabla.name + ':' + error.message);
});
}
});
}
}, function(tx, error) {
console.log('Error verifying DB tables: ' + error.message);
});
});
});
}
這導致在這些線路的 「Web控制檯」 過濾:
I/Web Console(14391): Verifying DB:1085
I/Web Console(14391): Verifying table undefined:1091
I/Web Console(14391): Verifying table item:1091
I/Web Console(14391): Error Verifying table undefined:no such table: undefined:1100
I/Web Console(14391): Error Verifying table item:no such table: item:1100
這是完全陌生的,我