怀疑HTML5 IndexedDB异步API

时间:2011-03-07 23:18:56

标签: javascript html5 asynchronous

在阅读HTML5 IndexedDB Specification时,我对其异步请求模型有些怀疑。查看request api example时,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 个答案:

答案 0 :(得分:6)

没有竞争条件,因为JavaScript引擎将完成执行实际范围(函数),然后触发任何回调或事件处理程序。阅读关于Mozilla Hacks的comment以下内容。