2015-10-28 349 views
0

有沒有辦法以異步的方式在javascript中執行sqlite查詢?執行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"; 
} 
+0

您正在使用哪個庫? – skypjack

+0

爲sqlite,沒有什麼,但我使用角js @skypjack –

+0

這是節點我想@MohammadJavadSeyyedi? – 82Tuskers

回答

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; 
0

您可以使用承諾和超時。那麼,像這樣的東西可能適合你? :

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

+0

最後一行是什麼? (insertUserInformation).then(successDB,errorDB);' –

+0

現在你有一個你的函數的異步版本,你說運行insertUserInformation,然後如果成功則爲successDB,如果失敗則爲errorDB。 – 82Tuskers