Se eseguo un cambio di percorso come $location.path('new/path')
, cosa succede con il codice sotto questo cambio di percorso? Come ho capito, un cambio di percorso non impedisce al resto del codice di funzionare, ma cosa sta realmente accadendo? Il codice verrà completato e solo allora il percorso cambierà? Quindi, se questo codice richiede molto tempo (ad esempio, salvare qualcosa su un server con una connessione di rete lenta), la modifica della posizione sarà altrettanto in ritardo? O le cose accadranno in parallelo?
risposta
Here's a small test, sembra che completi il codice, quindi cambia la posizione. Dai un'occhiata alla console nel jsfiddle, vedrai andare entrambi i loop, ma uno dopo l'altro.
Come @SilverlightFox fa notare, non esiste un'elaborazione parallela in javascript.
//this one loads first, executes the loop, then changes location.
function HomeCtrl($scope, $location) {
$location.path('/about');
var i = 0;
while(i < 1000000000) {
if(i % 100000000 === 0) {
console.log('home')
}
i++;
}
}
//this loop executes second.
function AboutCtrl($scope) {
$scope.name = 'John';
var i = 0;
while(i < 1000000000) {
if(i % 100000000 === 0) {
console.log('about')
}
i++
}
}
Se il code in HomeCtrl
is changed per includere un timeout, la posizione cambia in primo luogo perché il timeout rompe il flusso del programma e gli orari il timeout per eseguire dopo i AboutCtrl
esegue.
//changes location first, executes AboutCtrl, then does the "home" loop
function HomeCtrl($scope, $location) {
$location.path('/about');
setTimeout(function() {
var i = 0;
while(i < 1000000000) {
if(i % 100000000 === 0) {
console.log('home')
}
i++;
}
}, 1)
}
Con un proper async request è la stessa come il timeout: cambia location, 'About' piste Ciclo, quindi le finiture richiesta HTTP. Quindi, una chiamata ajax per aggiornare i database su una connessione lenta non impedisce all'applicazione di cambiare rotta.
//changes location, executes 'AboutCtrl', then finishes the http request and
//executes the 'home' loop.
function HomeCtrl($scope, $location, $http) {
$location.path('/about');
$http.get('/echo/json/').success(function() {
var i = 0;
while(i < 1000000000) {
if(i % 100000000 === 0) {
console.log('home')
}
i++;
}
});
Se stavo cambiando percorso a causa di una chiamata di rete, lo farei in succes/promessa di errore o di callback, se questo era l'intenzione.
- 1. Cosa succede sotto il cofano quando presentiamoViewController?
- 2. Cosa succede quando un processo è biforcato?
- 3. Cosa succede quando carico un assieme?
- 4. Cosa succede realmente quando un byte trabocca?
- 5. Parameter Binding: cosa succede sotto il cofano?
- 6. Cosa succede quando viene assegnato un tipo contenente un lambda?
- 7. cosa succede esattamente quando `enableProdMode()`
- 8. Cosa succede nel linguaggio assembly quando chiamate un metodo/funzione?
- 9. Cosa succede agli altri thread quando un thread si biforca()?
- 10. Cosa succede al codice dopo un reindirizzamento javascript (impostazione window.location.href)?
- 11. cosa succede quando si digita un URL nel browser
- 12. Cosa succede esattamente quando si salva un modello Backbone?
- 13. Cosa succede quando importa un modulo in ironpython?
- 14. Cosa succede quando creo un indice su una colonna?
- 15. Cosa succede quando un thread .NET genera un'eccezione?
- 16. Cosa succede quando viene chiamato "return" da un blocco "using"?
- 17. In MSP430, cosa succede quando cancello un puntatore nullo?
- 18. Cosa succede quando passo gli argomenti ad un simbolo Clojure?
- 19. Cosa succede quando non è logico un float?
- 20. Cosa succede quando si chiama un metodo statico in C#?
- 21. Cosa succede quando un pool di connessioni è esaurito?
- 22. Cosa succede a un database Sqlite quando l'app viene rimossa
- 23. Cosa succede sotto la copertina quando si restituisce un flusso da un oggetto remoto tramite .NET Remoting
- 24. Cosa succede sotto il cofano con `derivando` in Haskell?
- 25. Cosa succede quando uniamo RAII e GOTO?
- 26. ASP.NET: Cosa succede al codice dopo Response.Redirect (...)?
- 27. Cosa succede quando hai un ciclo infinito nel codice della vista Django?
- 28. Cosa succede quando l'app TestFlight scade?
- 29. Cosa succede quando aggiungo una dipendenza Maven?
- 30. Cosa succede quando aggiorniamo una pagina web?
Non ci sarà alcuna elaborazione parallela perché JavaScript è a thread singolo. È possibile effettuare richieste asincrone, ma qualsiasi evento attivato viene messo in coda. – SilverlightFox
@SilverlightFox Sì, sei corretto. Stavo pensando più all'ordine delle cose. Forse '$ posizione' potrebbe aggiornare il percorso prima dell'esecuzione del resto della funzione, se è abbastanza veloce. – Jorg