Читая Спецификацию HTML5 IndexedDB У меня возникли некоторые сомнения относительно ее модели асинхронного запроса.При рассмотрении примера api-запроса для запуска асинхронного запроса используется метод open
.
var request = indexedDB.open('AddressBook', 'Address Book');
request.onsuccess = function(evt) {...};
request.onerror = function(evt) {...};
На момент запуска этого запроса обработчики событий не были определеныпока.
- Разве это не условие гонки?
- Что происходит, когда метод
open
завершается успешно, прежде чем интерпретатор javascript выполнит присваивание onsuccess
? - Или запрос действительно запускается только после регистрации обоих обратных вызовов?
По моему мнению, API, подобный следующему, будет гораздо более логичным:
db.open('AddressBook', 'Address Book', {
onsuccess: function(e) { ... },
onerror : function(e) { ... }
});