javascript - HTML5 IndexedDB Async API 疑惑

标签 javascript html 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) { ... }
});

最佳答案

不会出现竞争条件,因为 JavaScript 引擎将完成实际作用域(函数)的执行,然后触发任何回调或事件处理程序。阅读以下 comment在 Mozilla Hacks 上。

关于javascript - HTML5 IndexedDB Async API 疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226505/

相关文章:

javascript - Node.js、异步模块、并发

javascript - 未捕获的 TypeError : Object function (a, b){return new e.fn.init(a,b,h)} 没有方法 'widget'

javascript - AngularJS 发布到 MVC 不工作

javascript - 上传文件时显示加载图标

javascript - jquery width() 方法总是更新初始宽度

C++ 每秒运行一次异步函数

c# - 在 Web API Controller 中调用多个异步任务的最佳方式是什么?

html - 禁用在 HTML <SELECT> 控件上触发的事件

javascript - Webpack 无法加载 *.sass 文件

javascript - 构建空闲游戏对象的最佳方法