调用消费方法后,如何在分配回调时执行回调
How does a callback get executed when assigned after consuming method got called
问题:
我正在读一本关于Html5数据存储IndexedDb的书。IndexedDb API使用以下代码打开数据库连接:
var request = indexedDB.open('some name');
request.onsuccess = function(event) {
obj.id = event.target.result
}
request.onerror = function(event) {...}
请求变量被分配了一个回调,该回调在请求成功执行时被调用。但在这些行之后,请求永远不会被调用。所以我的问题是:
onsuccess回调是如何执行的?它不能在indexedDB.open方法中,因为那里还没有分配onsuccess回调?
我错过了什么?
编辑:
在詹姆斯的评论之后,我发现了我问题的缺失链接:
现在和我一起说:异步编程并不一定意味着多线程。Javascript是一个单线程运行时-您根本无法在JS中创建新线程,因为语言/运行时不支持它。
来源:异步编程是如何在单线程编程模型中工作的?
解决方案:
正如James在下面的回答中指出的那样,像indexedDB.open()这样的异步函数被推入一个称为"事件循环"的特殊队列:
事件循环是回调函数的一个特殊队列。当异步代码被执行时,回调被推入队列。只有在异步函数执行完毕后的代码,Javascript引擎才会执行事件循环。
来源:http://www.hiddenwebgenius.com/blog/guides/understanding-javascripts-asynchronous-code/
如果indexedDB.open异步执行请求,那么在您的代码放弃控制之前,请求不会完成,因此此时request.onsaccess将被分配。
浏览器中的Javascript是单线程的,因此在onsuccess/onerror被分配
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 使用Javascript中的回调处理变量分配
- Node.js使变量等待分配,直到回调函数完成
- Node.js,为事件分配回调函数'数据'
- 调用消费方法后,如何在分配回调时执行回调
- jQuery表单处理,如何在回调时重新分配函数
- 为变量分配回调函数
- 我们是否可以安全地从套接字参数的回调中分配对象引用
- 将异步函数及其回调函数分配给单个变量
- 为什么参数分配给回调
- 正在从内部回调中分配变量
- jQuery:$.ajax 成功回调不允许我分配给外部私有变量
- 如何在Mongoose中为变量分配回调返回值
- 对更多元素使用相同的事件回调函数-按周期分配
- 如何使用窗口.Onload函数分配一个验证回调函数
- 我怎么能分配一个回调函数后,我在javascript查询的东西
- 将回调函数分配给变量,并在高阶函数之外调用
- Javascript:将函数分配为回调函数和变量作用域