Tropezamos con esta pregunta mientras se busca otra cosa, pero creo que tengo algo de código de plantilla que le ayudará a empezar envolviendo consultas WebSQL en promesas jQuery.
Este es un ejemplo sqlProviderBase
a $.extend
en su propio proveedor. Tengo un ejemplo con un taskProvider
y una página que llamaría al taskProvider
en el evento de mostrar página. Es bastante escaso, pero espero que ayude a orientar a los demás en la dirección correcta para envolver las consultas en una promesa de un mejor manejo.
var sqlProviderBase = {
_executeSql: function (sql, parms) {
parms = parms || [];
var def = new $.Deferred();
// TODO: Write your own getDb(), see http://www.html5rocks.com/en/tutorials/webdatabase/todo/
var db = getDb();
db.transaction(function (tx) {
tx.executeSql(sql, parms,
// On Success
function (itx, results) {
// Resolve with the results and the transaction.
def.resolve(results, itx);
},
// On Error
function (etx, err) {
// Reject with the error and the transaction.
def.reject(err, etx);
});
});
return def.promise();
}
};
var taskProvider = $.extend({}, sqlProviderBase, {
getAllTasks: function() {
return this._executeQuery("select * from Tasks");
}
});
var pageThatGetsTasks = {
show: function() {
taskProvider.getAllTasks()
.then(function(tasksResult) {
for(var i = 0; i < tasksResult.rows.length; i++) {
var task = tasksResult.rows.item(i);
// TODO: Do some crazy stuff with the task...
renderTask(task.Id, task.Description, task.IsComplete);
}
}, function(err, etx) {
alert("Show me your error'd face: ;-[ ");
});
}
};
Gracias Jacob! http://tutsplus.com/lesson/deferreds/?WT.mc_id=learnjquery también habla de deferreds. Estoy viendo tu código y está en línea con lo que Jeffrey Way dice que haga. –