2013-02-27 34 views
0

我目前正在使用WebSql的異步API。鑑於此代碼:是否可以在同一個事務中嵌套句子?

 db.transaction(
      function (tx) {      
       tx.executeSql("SELECT * FROM table", 
        [], 
        function(t, resultSet){ //Anonimous function implementing SQLStatementCallback 
         t.executeSql(...); //#1 
        } 
       ); 
      }, 
      function (err) { 
       console.error("Error in transaction");       
      }, 
      function(){ 
       console.log("Transaction complete"); //#2     
      } 
     ); 

我在規範中找不到它。 executeSql中的第三個參數是實現SQLStatementCallback的功能。這個接口中的第一個參數是另一個SQLTransaction(在我的代碼中命名爲t)。是否有可能使用這個事務對象繼續執行句子?特別是:

  1. t是否與tx相同?
  2. 我可以使用t來執行另一個SQL語句,並且在這種情況下#1保證在#2之前運行嗎?

回答

1
  1. 是,交易對象是ttx相同。

  2. 是的,由於您已經監聽了成功處理程序的回調函數,所以它被授予在2#之前運行1#的權利。我想實現請求的排序,我使用t。每當我想讓並行運行時,我使用tx。請參閱我的websql request executor實施YDN-DB庫中的代碼。

0

是的,這是WebSQL API的工作原理。

由於異步執行,這只是在一個事務中執行多個命令的方式。

+0

那麼API如何知道我何時完成了事務?例如,我可以在#1的回調中再次調用'executeSql',然後再次調用第二個操作調用'executeSql'。事實上,我可以在'executeSql'回調中執行其他操作,例如連接到WS,這將延遲事務的SQL組件。我甚至可以在「transaction」塊中多次調用'executeSql',每個塊都有其回調函數。 – 2013-03-04 08:25:25

+0

>> API如何知道我何時完成交易?事務在不被主動使用時被提交。 – 2013-03-07 06:56:38

相關問題