2011-08-30 7 views
1

HTML5 및 웹 데이터베이스 저장소를 사용하여 응용 프로그램을 개발하고 있습니다.주 함수 콜백에서 반환 값 가져 오기

나는 사용하여 테이블에 행을 삽입하고 새 ID (테이블의 기본 키)를 반환하여 생성합니다 :

function insertIntoTable(title, text, sketchFileName, categoryId) 
{ 
    var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024); 
    var returnedId = -1; 
    db.transaction(
     function (tx) { 
      if (sketchFileName == '') 
      { 
       tx.executeSql('INSERT INTO TableXXX (title, content, created, categoryID) VALUES (?, ?, ?, ?)', 
          [title, text, Date.now(), categoryId], 
          function (transaction, resultSet) { 
           if (resultSet.rowsAffected) { 
            returnedId = resultSet.insertId; 
           } 
          }, handleSQLError); 
      } 
     }, handleSQLError); 
    ); 

    return returnedId; 
} 

을하지만 난 항상 얻을 -1. 사파리 개발 모드를 사용하여 테이블의 새 행을 봅니다.

어떤 조언이 필요합니까?

+0

resultSet.rowsAffected를 true 또는 false로 경고 할 수 있습니까? – DoctorMick

+0

경고를 추가했으며 사실입니다. – VansFannel

답변

1

returnedId 선언을 함수 외부로 옮긴 다음 함수를 두 번 호출하면 반환 된 값이 첫 번째 삽입의 ID이므로이를 설정합니다. 데이터베이스가 비동기 적이기 때문에 함수가 반환 된 후에 ID가 설정되는 것처럼 보입니다.

W3C 사양에 따르면 openDatabase 대신 사용할 수있는 openDatabaseSync가 있어야하지만 Safari (5.0.1)에서 작동하도록 설정할 수 없습니다.

분명히, 코드가 스 니펫 외부에있는 것처럼 보이는 것은 분명하지만 게시자가 코드를 리팩토링 할 수 있기 때문에 값을 반환 할 필요가 없으며 반환 된 값을 관리 할 수 ​​있기를 바랍니다. id가 콜백에 있습니다.

+0

나중에이 ID가 필요합니다. 어쩌면 사용자가 텍스트를 편집하려고하고 해당 행을 업데이트해야합니다. – VansFannel