У меня возникают проблемы с транзакциями базы данных на устройствах IOS. Если пользователь не прикасается к телефону, все работает так, как ожидалось. Если пользователь нажимает/прокручивает/затрагивает экран, некоторые транзакции напрямую вызывают их successCallback, не вызывая обратного вызова фактической транзакции.
Упрощенный пример здесь: http://jsfiddle.net/Tk9rv/
Чтобы проверить, просто откройте http://jsfiddle.net/Tk9rv/embedded/result/ в своем мобильном сафари на IOS и не прикасайтесь к устройству во время загрузки. Вы увидите список генерируемых отладочных сообщений, выглядящих следующим образом:
database is running
table will be cleared
store method called for '10'.
about to insert '10'.
transaction successful for '10'
store method called for '9'.
about to insert '9'.
transaction successful for '9'
store method called for '8'.
about to insert '8'.
transaction successful for '8'
[...]
Теперь перезагрузите страницу и во время загрузки, прокрутки и случайного нажатия. Вы увидите, что некоторые сообщения "о вставке..." отсутствуют.
database is running
table will be cleared
store method called for '10'.
about to insert '10'.
transaction successful for '10'
store method called for '9'.
about to insert '9'.
transaction successful for '9'
store method called for '8'.
transaction successful for '8' <-- WHERE IS MY "about to insert '8'." ???
store method called for '7'.
about to insert '7'.
transaction successful for '7'
[...]
Это потому, что транзакционная транзакция полностью пропущена! Но почему? И ПОЧЕМУ удастся избежать выстрела с помощью killCellback?
[Это упрощенный пример, пожалуйста, не говорите мне, чтобы я не делал этого setTimeout. В реальном мире есть данные, загружаемые async, а затем вставленные...:)]
Я думаю, что здесь есть аналогичная проблема транзакция HTML5 Web SQL Missing In Action, но нет никакого решения или намека.
Любые идеи? Я застрял... Спасибо!