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 将抛出错误。请考虑以下原因以了解为什么禁用 Autoruns:

  • 如果在调度回调之前未能打开运行循环,则 Autoruns 不会在生产中出错。

  • 禁用 autoruns 可以识别在应用程序在运行循环之外运行时发生的错误测试失败,并有助于测试您的应用程序。

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

emberjs_application_concerns.htm
广告