Сомнения по поводу HTML5 IndexedDB Async API - PullRequest
7 голосов
/ 08 марта 2011

Читая Спецификацию 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) { ... }
});

1 Ответ

6 голосов
/ 13 апреля 2011

Не будет условия гонки, потому что движок JavaScript завершит выполнение фактической области (функции) и затем сработает любой обратный вызов или обработчик события.Читайте следующий комментарий к Mozilla Hacks.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...