在jQuery Deferred/Promise中包装webSql executeSql调用

Phi*_*enn 6 javascript jquery html5 web-sql

executeSql的html5规范包括成功回调和失败回调:

db.transaction(function(tx) {    
    tx.executeSql('SELECT * FROM MyTable WHERE CategoryField = ?', 
    [ selectedCategory ], 
    function (tx, rs) { displayMyResult(rs); }, 
    function (tx, err) { displayMyError(err); } );
});
Run Code Online (Sandbox Code Playgroud)

如果我使用jQuery,有没有办法使用新的jQuery promise/deferred hotness来实现它?

Jos*_*oss 7

我只是想再添一个例子.

(function () {
    // size the database to 3mb.
    var dbSize = 3 * 1024 * 1024,
        myDb = window.openDatabase('myDb', '1.0', 'My Database', dbSize);

    function runQuery() {
        return $.Deferred(function (d) {
            myDb.transaction(function (tx) {
                tx.executeSql("select ? as Name", ['Josh'], 
                successWrapper(d), failureWrapper(d));
            });
        });
    };

    function successWrapper(d) {
        return (function (tx, data) {
            d.resolve(data)
        })
    };

    function failureWrapper(d) {
        return (function (tx, error) {
            d.reject(error)
        })
    };

    $.when(runQuery()).done(function (dta) {
        alert('Hello ' + dta.rows.item(0).Name + '!');
    }).fail(function (err) {
        alert('An error has occured.');
        console.log(err);
    });

})()
Run Code Online (Sandbox Code Playgroud)


psr*_*psr 2

我一直在等待答案,但到目前为止还没有任何消息,所以我会尝试一下。我无法运行此程序,因此对于任何错误我深表歉意。

您是否正在寻找类似的东西:

function deferredTransaction(db,transaction,transactionFunction(transaction)) {
    me=this;
    return $.Deferred(function(deferedObject){
        db.transaction(transactionFunction(transaction),
        function(tx,rs) { me.resolve(tx,rs); },
        function(tx,err) { me.reject(tx,err); } );
    }).promise();
}

dtx=deferredTransaction(db,tx,function(tx) {    
    tx.executeSql('SELECT * FROM MyTable WHERE CategoryField = ?', 
    [ selectedCategory ]);
dtx.then(function (tx, rs) { displayMyResult(rs); }, 
    function (tx, err) { displayMyError(err); } );
Run Code Online (Sandbox Code Playgroud)