在阅读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) { ... }
});
答案 0 :(得分:6)
没有竞争条件,因为JavaScript引擎将完成执行实际范围(函数),然后触发任何回调或事件处理程序。阅读关于Mozilla Hacks的comment以下内容。