2014-12-18 3 views
1

Я цепочка SQLite вызова в телефоне щели для достижения synchronousity, например, так:Цепного SQLite вызов в PhoneGap

db.transaction(initDB, errorCB, function() { 
       db.transaction(lookupContactDB, errorCB, function() { 
        db.transaction(contactUpdateDB, errorContactCB, function() { 
         db.transaction(lookupUpdatedDB, errorUpdateCB, function() { 
          updateRiders(); 
         }) 
        }) 
       }) 
      }); 

Однако ясно, что обратные вызовы успеха возвращаются наш порядок. Как это может быть, когда следующая транзакция должна начинаться только тогда, когда обратный вызов успеха предыдущего был вызван. Я что-то упускаю?

ответ

1

Думаю, вы не должны делать новую транзакцию внутри других транзакций в этом случае. Вместо этого вы, скорее всего, захотите сделать SQL-исполнения. Так что-то подобное может быть лучше поток

db.transaction(initDB, errorCB, function(tx) { 
    tx.executeSql("YOUR QUERY", [], function(tx, results1) { 
     tx.executeSql("SECOND QUERY", [], function(tx, results2) { 
      tx.executeSql("THIRD QUERY", [], function(tx, results3) { 
       updateRiders(); 
      }); 
     }); 
    }); 
}; 

Теперь то, что происходит, является следующее:

  1. Сделка приобретается,
  2. «ВАШ ЗАПРОС» выполняется,
  3. , когда это данные извлекаются, «SECOND QUERY» выполнен,
  4. , когда эти данные получены, «ТРЕТИЙ ЗАПРОС» выполнен,
  5. при получении этих данных, updateRiders.
Смежные вопросы