- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图理解什么是 JavaScript 中的事件循环。发现了 Mozilla 开发者网络关于事件循环的链接。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop
里面提到了
Queue
A JavaScript runtime contains a message queue, which is a list ofmessages to be processed. To each message is associated a function.When the stack is empty, a message is taken out of the queue andprocessed. The processing consists of calling the associated function(and thus creating an initial stack frame). The message processingends when the stack becomes empty again.
在此上下文中消息队列是什么意思?它是指我们在浏览器中执行的每次点击或键盘事件吗?每个事件都是一条消息并添加到队列中?
请澄清。
最佳答案
术语“消息队列”的含义与听起来差不多。它是一个要处理的队列(读取:要执行的事件回调),一次一个并按顺序处理。
这个“消息队列”不是 ECMAScript 的一部分,而是用于描述在单线程执行模型中处理异步事件的行为 - 每个浏览器事件(点击、计时器、AJAX 等)都被添加到队列中并以相同的方式进行处理。同样,node.js 使用事件进行异步 I/O 操作。
每当给定的全局上下文(即窗口或进程)没有 JavaScript 执行时,“消息队列”就会被处理,直到为空(通过“事件循环”)。这就是为什么阻塞 JavaScript 是不好的 - 它会阻止队列被处理(这会阻止执行事件回调),直到阻塞代码停止执行。
event queue / event loop in node.js与浏览器的工作方式相同,只是事件不同。这就是 Node.js 在不暴露多个线程和相关复杂性的情况下支持并发的方式。
<小时/>将消息添加到此“消息队列”的代码最常见的方法之一是使用setTimeout
- 当超时到期时将回调添加到队列中。假设有一点善意的谎言(因为回调仅在事件实际发生时才添加到队列中),请考虑
setTimeout(f, 0)
setTimeout(g, 0)
将以序列 f, g
while
setTimeout(f, 20) // MUST exceed time to g event firing
setTimeout(g, 0)
会将回调序列“排队”g, f
。这些顺序保证是可以依赖的,因为(由于 setTimeout 保证)添加到队列中的消息/事件是按顺序处理的。
由于上面的代码正在运行(例如正在执行 JavaScript),因此还可以保证在给定的 JavaScript 停止执行并且可以处理“消息队列”之前,f
和 g
回调都不会被调用。但是,不能普遍保证(在任何一种情况下)f
和 g
之间不会处理额外的事件/回调。
关于javascript - 此链接中的 "message queue"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22827311/
我尝试将 python 2.x 代码移植到 python 3。我正在努力解决的问题是 from mimetools import Message ... headers = Message(Strin
我有一个输入组件,它有三种类型的验证(required、validatorMessage、converterMessage),这个输入有自己的消息图标,整个表单有一个消息组件来显示所有组件的所有消息,
我有一个使用消息代理 (activemq) 的带有 spring 和 websockets 的 webapp。 这是我的配置类: @Configuration @EnableWebSocketMess
据我了解mbox Python 3.6 标准库中的类生成 email.message.Message 类型的旧式消息对象. 较新的类(class) email.message.EmailMessage
我使用的是mysql。 我有一个包含 userid、message_id、opened(true 或 false)、时间戳的消息表。 我希望所有未打开最近收到的 5 条消息的用户 这就是我现在拥有的:
我是 Android 的新手,发现要不断更新主视图,我必须创建一个线程来处理各种进程,然后将更新传回主视图。我决定使用 Handler 类来执行此操作。此示例中的 View 有一个用于激活代码的按钮和
我遇到了重定向符号的不同位置( > , &2 message message echo message >&2 message >&2 echo message message 对于所有表单,我得到了
我想使用 firebase 云函数发送通知,所以我尝试使用 firebase.messaging().getToken() 获取 token ,但我不断收到错误消息: TypeError: fireb
我实现了一个短信应用。现在我在使用 Oppo 设备时遇到了问题,因为无论何时收到消息,系统都会将默认应用程序更改为内置应用程序并显示此消息: For your messages security, S
我正在实现本指南:https://spring.io/guides/gs/centralized-configuration/关于Spring Cloud配置。 服务器: @EnableConfigS
我想在“匹配”之后,向所有比赛发送介绍信息。你知道一种轻松发送的方法吗?(我使用 Bluestacks) 提前致谢。问候。 最佳答案 只需传递 session.send()在session.dialo
在我们的应用程序中,我们使用 kafka 并有一个像这样的 Spring Cloud 输入流 @Component public interface SomeChannel { @Input(
这周我在通过 Node.js 库(代码相同,库版本相同等)向我的 iOS 设备发送消息时遇到了很多内部错误 很难调试,因为有时它会起作用。当我使用 for 循环发送 10 条消息时,我的设备将收到 3
我目前正在记录错误并希望获得尽可能多的描述性细节。我知道我可以捕获许多不同类型的异常,但 Exception.Message 之间有什么区别?和 Exception.InnerException.Me
我创建了一个映射到 MyBean.beansField 的表单。我使用 javax.validation.NotNull 注释来确保必须输入它。到目前为止一切正常,但错误消息如下所示: beansFi
我正在研究 Azure 服务总线。我的服务总线队列正在处理一条消息 3 次。我的消息锁定时间是5分钟。每条消息最多处理 2 分钟,但我不知道为什么队列会选择相同的消息并发送到处理,而重复的消息仅在 5
我正在使用最新的快速修复版本,即 1.6.0。我已经有针对 1.5.3 编写的代码,我想做的是将其升级到 1.6.0 我遇到的问题是,当我使用破解(msg,sessionID)方法时,它会抛出quic
当我调用 grails message()函数来查找和评估消息 key 对,它无法评估参数。 在我的 Controller 中,我调用消息函数: rejectWithError(message(cod
我使用一个小型 Spring 应用程序,其中数据库中的值很少,我想使用可变调用来检索它们。 API 在这里, @RestController @RequestMapping("/api/v1/prod
我在想在用以更好的方式,像这样: Please inform us about: 这个想法是以一种不同的方式向用户展示消息,具有更多的风格。这可能吗? 最佳答案 它们可通过 Fac
我是一名优秀的程序员,十分优秀!