As stated by Babyburger waitForAngualar needs a page reload to sync when is set to enable if you are coming from a false state, but, is not the only way to use Get.
Imaging you are working on a page with a hyperlink, the landing page won't be sync if protractor didn't asked for the API again, so as long as the page refreshes after browser.waitForAngular(enabled) by any means it should sync again. Call for a page refresh, move to a new page, use get, click send and get redirected to another page.
Now the difference:
If you use browser.ignoreSyncrhonization you are disabling all protractor sync functions. So anything like an add-on that enables protractor to test with react or any other framework would be disabled too
If you use browser.waitForAngularEnabled(false) you will only stop waiting for $timeout and $http, coming from Angular API, every other sync would remain and work as expected.
If you have a test that requires you to read information changing, pictures moving, animation completing or other things requiring you to start processing what is happening from the moment the step is taking I have 2 answers for you:
1.- Do NOT run that as a E2E test, it is a behavior easier to observe, diagnose and evidence by a human
2.- Get a video recording of the step: if you really need to validate it, and the completion state is not enough to validated as a pass, get a video with a screen capture command and then get the same person responsable of looking to test results to validate that step.
For all Developers out there, there is a function called $interval is te expected Angular function for a wait that doesn't end, restarts or has a funny functionality that is not the Timeout expectation, which is, if it doesn't happen in a short time, send a flag and stop
Interval is for wait until happening, and protractor ignores this one so it won't mess with test execution.
Here is a developer explaining this Interval vs Timeout
Please QA teams of the world, do NOT allow a lazy developer to give lazy code as an answer.
I had a team which didn't include interval, just used endless timeouts, and it caused a lot of errors in our automation execution, it also lead to excess resources allocated in the machine running the script due to all the timeouts running at the same time in the same window. That same team has now a new assignment, but I had pushed for them to not misuse those 2 wrappers, the coding has gone smoother and creating test for each new function is a breeze thanks to having protractor work for us and not the other way around.