在阅读 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) { ... }
});
最佳答案
不会出现竞争条件,因为 JavaScript 引擎将完成实际作用域(函数)的执行,然后触发任何回调或事件处理程序。阅读以下 comment在 Mozilla Hacks 上。
关于javascript - HTML5 IndexedDB Async API 疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226505/