Âmbito $ angular. $ Apply vs $ timeout como uma aplicação $ segura

Estou tentando entender melhor as nuances do uso do serviço $ timeout no Angular como uma espécie de método "safe $ apply". Basicamente, em cenários em que um trecho de código pode ser executado em resposta a um evento Angular ou a um evento não angular, como jQuery ou algum evento DOM padrão.

Como eu entendo as coisas:

Quebrar o código em $ scope. $ Apply funciona bem em cenários em que você ainda não está em um loop de resumo (também conhecido como evento jQuery), mas gera um erro se um resumo estiver em andamentoA quebra de código em uma chamada $ timeout () sem parâmetro de atraso funciona, se você já está em um ciclo de resumo ou não

Observando o código-fonte angular, parece que $ timeout faz uma chamada para $ rootScope. $ Apply ().

Por que $ timeout () também gera um erro se um ciclo de resumo já está em andamento?A melhor prática é usar $ scope. $ Apply () quando você tiver certeza de que um resumo já não estará em andamento e $ timeout () quando precisar que seja seguro de qualquer maneira?$ Timeout () é realmente uma "aplicação segura" aceitável ou existem truques?

Obrigado por qualquer insight.

questionAnswers(3)

yourAnswerToTheQuestion