Run循环
优质
小牛编辑
135浏览
2023-12-01
这是应用程序的大部分内部代码发生的区域。 这用于批处理,是一种订购或重新排序工作的方法,以检查它是否有效和高效。 它根据特定队列调度工作,以按优先级顺序完成工作。
将运行循环与非Ember API集成会导致一些异步回调。 例如 -
- setTimeout and setInterval callbacks
- AJAX回调
- postMessage和messageChannel事件处理程序
- Websocket回调
- DOM更新和事件回调
基于优先级指定的队列,运行循环在Ember中工作 -
Ember.run.queues
=> ["sync", "actions", "routerTransitions", "render", "afterRender", "destroy"]
sync - 它是一个包含绑定同步作业的优先级较高的队列。
actions - 这是一个包含计划任务的通用工作队列。
routerTransitions - 它指定路由器中的转换作业。
render - 用于呈现更新DOM的作业。
afterRender - 在完成计划任务后运行作业。
destroy - 它是一个优先级较低的队列,用于终止计划销毁的作业。
基于队列执行作业
按照以下步骤执行基于队列的作业 -
Step 1 - 在此步骤中,将在CURRENT_QUEUE中检查具有最高优先级队列的挂起作业。 如果没有待处理的作业,则运行循环将完成。
Step 2 - 将新临时队列指定为WORK_QUEUE 。
Step 3 - 将作业从CURRENT_QUEUE传输到WORK_QUEUE 。
Step 4 - 在WORK_QUEUE连续处理作业。
Step 5 - 从步骤1开始重复。
测试时运行循环的行为
如果我们尝试在没有运行循环的情况下安排工作,那么当应用程序处于测试模式时,Ember将抛出错误。 考虑以下理由来理解为什么Autoruns被禁用 -
如果在调度回调之前未能打开运行循环,则Autoruns不会在生产中出错。
禁用autoruns可识别应用程序在运行循环外运行时出现的错误测试失败,并有助于测试应用程序。
有关这些运行循环的更多信息以及示例,请参阅此link 。