2013-02-27 2 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. tx과 동일합니까?
  2. t을 사용하여 다른 SQL 문장을 실행할 수 있습니까?이 경우 # 2 이전에 # 1이 (가) 실행되도록 보장됩니까?

답변

1
  1. 예, 트랜잭션 개체가 ttx에서 동일합니다.

  2. 예, onsuccess 처리기 콜백을 이미 수신 했으므로 1 # 2를 (를) 실행하기위한 수혜자입니다. 요청의 순서를 얻고 싶습니다. 나는 t을 사용합니다. 내가 평행하게 달릴 때마다 나는 tx을 사용한다. 내 websql request executor 구현 YDN-DB 라이브러리의 코드를 참조하십시오.

0

예, 이것이 WebSQL API의 작동 방식입니다.

비동기 실행으로 인해 한 트랜잭션에서 여러 명령을 실행하는 방법입니다.

+0

그런 다음 API로 트랜잭션 완료 시점을 어떻게 알 수 있습니까? 예를 들어, # 1의 콜백에서'executeSql'을 다시 호출 한 다음 두 번째 작업의 콜백에서'executeSql'을 다시 호출 할 수 있습니다. 사실, 나는 WS에 연결하는 것과 같은 executeSql 콜백에서 다른 작업을 수행 할 수 있는데, 이것은 트랜잭션의 SQL 컴포넌트를 지연시킬 것이다. "transaction"블록에서 여러 번 executeSql을 호출 할 수도 있습니다. 각 블록은 콜백을 가지고 있습니다. –

+0

>> API로 트랜잭션 완료 시점을 어떻게 알 수 있습니까? 트랜잭션은 사용되지 않을 때 커밋됩니다. –

관련 문제