EmberJS - 运行循环

这是应用程序大部分内部代码所在的区域。它用于批处理,是一种对工作进行排序或重新排序以检查其是否有效和高效的方式。它根据特定队列安排工作,以按优先级顺序完成工作。

将运行循环与非 Ember API 集成会导致一些异步回调。例如 −

  • setTimeout 和 setInterval 回调
  • AJAX 回调
  • postMessage 和 messageChannel 事件处理程序
  • Websocket 回调
  • DOM 更新和事件回调

Ember 中的运行循环基于按优先级指定的队列工作 −

Ember.run.queues
=> ["sync", "actions", "routerTransitions", "render", "afterRender", "destroy"]
  • sync − 它是一个包含绑定同步作业的更高优先级队列。

  • actions −它是一个包含计划任务的通用工作队列。

  • routerTransitions − 它指定路由器中的转换作业。

  • render − 它用于渲染更新 DOM 的作业。

  • afterRender − 它在完成计划任务后运行作业。

  • destroy − 它是一个较低优先级的队列,用于终止计划销毁的作业。

基于队列的作业执行

按照以下步骤执行基于队列的作业 −

步骤 1 − 在此步骤中,将在 CURRENT_QUEUE 中检查最高优先级队列的待处理作业。如果没有待处理的作业,则运行循环将完成。

步骤 2 − 将新的临时队列指定为 WORK_QUEUE

步骤 3 − 将作业从 CURRENT_QUEUE 转移到 WORK_QUEUE

步骤 4 − 依次处理 WORK_QUEUE 中的作业。

步骤 5 − 从步骤 1 重复。

测试时运行循环的行为

如果我们尝试在没有运行循环的情况下安排工作,那么当应用程序处于测试模式时,Ember 会抛出错误。考虑以下原因以了解禁用自动运行的原因 −

  • 如果您未能在调度回调之前打开运行循环,则自动运行不会在生产中犯任何错误。

  • 禁用自动运行可识别应用程序在运行循环之外运行时发生的不正确的测试失败,并有助于测试您的应用程序。

有关这些运行循环的更多信息以及示例,请参阅此链接

emberjs_application_concerns.html