2013-02-27 67 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

相关问题