目录

Run循环

这是应用程序的大部分内部代码发生的区域。 这用于批处理,是一种订购或重新排序工作的方法,以检查它是否有效和高效。 它根据特定队列调度工作,以按优先级顺序完成工作。

将运行循环与非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

↑回到顶部↑
WIKI教程 @2018