执行sqlite查询异步

时间:2015-10-28 18:47:31

标签: javascript sqlite

有没有办法在javascript中以异步方式执行sqlite查询?

如果没有,如何在下面的代码中处理同步执行方式的错误!?

var db = openConn('instabartar' , '1.0' , 'Insta Bartar', 200000);
db.transaction(insertUserInformation , errorDB ,successDB );

function insertUserInformation(tx){
    tx.executeSql('CREATE TABLE IF NOT EXISTS USERINFO (ID UNIQUE, USERNAME , FULLNAME , PROFILEPIC , ACCESS_TOKEN)');
}

function openConn(databaseName, dbVersion, dbShowName, dbSize){
    return window.openDatabase(databaseName, dbVersion, dbShowName, dbSize);
}

function errorDB(tx, err) {
    console.log("Error processing SQL: " , err);
    return err;
    //alert("Error processing SQL: " + err);
}

function successDB() {
    console.log("success!" );
    return "success";
}

2 个答案:

答案 0 :(得分:0)

你可以使用promises和timeout。那么,这样的事情对你有用吗? :

var q = require('q'); 

function insertUserInformation(tx){
            var def = q.defer();
            setTimeout(function() {                  
               tx.executeSql('CREATE TABLE IF NOT EXISTS USERINFO (ID UNIQUE,USERNAME , FULLNAME , PROFILEPIC , ACCESS_TOKEN)');
               if (tx.error) {
                  def.reject(tx.error.status);
               }
               else {
                  def.resolve();
               }
            }, 0);
            return def.promise;
    }
insertUserInformation(insertUserInformation).then(successDB, errorDB);

您可以在此处了解有关承诺的更多信息:https://github.com/dscape/nano

答案 1 :(得分:0)

我找到了自己的答案;我们可以执行代码同步并处理与下面相同的错误

var defferd = $q.defer();
         function insertUserInformation(tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS USERINFO (ID UNIQUE, USERNAME , FULLNAME , PROFILEPIC , ACCESS_TOKEN)');
         }

    function openConn(databaseName, dbVersion, dbShowName, dbSize){
        return window.openDatabase(databaseName, dbVersion, dbShowName, dbSize);
     }

    function errorDB(tx, err) {
        defferd.reject(err);
    }

    function successDB() {
        defferd.resolve(result)
    }

return defferd.promise;