Jeśli wykonam zmianę ścieżki, taką jak $location.path('new/path')
, co stanie się z kodem poniżej tej zmiany ścieżki? Jak rozumiem, zmiana ścieżki nie powstrzymuje reszty kodu przed uruchomieniem, ale co się właściwie dzieje? Czy kod się skończy i dopiero wtedy zmieni się ścieżka? Więc jeśli ten kod jest bardzo czasochłonny (np. Zapisywanie czegoś na serwerze w powolnym połączeniu sieciowym), czy zmiana lokalizacji będzie podobnie opóźniona? Czy rzeczy dzieją się równolegle?
Odpowiedz
Here's a small test, wygląda na to, że kończy działanie kodu, a następnie zmienia lokalizację. Spójrz na konsolę w jsfiddle, zobaczysz obie pętle, ale jedna po drugiej.
Jak zauważa @SilverlightFox, nie ma przetwarzania równoległego w 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++
}
}
Jeśli code in HomeCtrl
is changed zawierać timeout, położenie zmienia pierwsze dlatego limit czasu przerywa przepływ programu i harmonogramy limit czasu na wykonanie po z AboutCtrl
wykonany.
//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)
}
Z proper async request jest taka sama jak timeout: zmiany lokalizacji, „O mnie” przebiegów pętli, a następnie zakończy żądania HTTP. Tak więc wywołanie ajax, aby zaktualizować bazy danych przy wolnym połączeniu, nie powstrzymuje aplikacji przed zmianą tras.
//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++;
}
});
Gdybym była zmiana trasy powodu połączenia sieciowego, zrobiłbym to w sukces/obietnicy błędu lub zwrotnego, czy to było zamierzone.
- 1. co się dzieje, gdy wątek wyrzuca wyjątek?
- 2. Co się dzieje, gdy moja() jest warunkowa?
- 3. Co się dzieje, gdy dostawcy typu zmieniają się w F #?
- 4. Co dzieje się w BeginProcessRequest()?
- 5. Co się dzieje, gdy wtyczka docker-maven próbuje zbudować obraz?
- 6. Co się dzieje w __libc_start_main?
- 7. Co się tutaj dzieje z purecsami?
- 8. Co się dzieje, gdy pamięć podręczna varnish jest pełna?
- 9. Co się dzieje, gdy daję MyObject obj = new MyObject()
- 10. Co się dzieje, gdy wywoływana jest funkcja setState()?
- 11. Co się dzieje, gdy mongodb jest za mało pamięci?
- 12. Co się dzieje, gdy wywołasz `if key in dyict`
- 13. Co się dzieje, gdy oczekujesz na już ukończone zadanie?
- 14. co się dzieje, gdy dwukrotnie importuję moduł w pythonie
- 15. Android - Co się dzieje, gdy urządzenie jest odblokowane?
- 16. Co dokładnie dzieje się, gdy funkcja Go zwraca wiele wartości
- 17. Co dokładnie dzieje się, gdy nie można użyć polecenia unbind()?
- 18. Co dzieje się, gdy połączenia z MongoDB nie są zamknięte?
- 19. IO dzieje się niesprawna, gdy używa się getLine i putStr
- 20. iskra + montaż sbt: "deduplikacja: inna zawartość pliku znajduje się poniżej"
- 21. Wiosna - @Transactional - Co dzieje się w tle?
- 22. Co dzieje się z zadaniem po anulowaniu?
- 23. Co dzieje się z wyłączoną obsługą przerwań?
- 24. Co się tutaj dzieje? sizeof (short_int_variable + char_variable)
- 25. Co tu się dzieje globalnie [{a}] = 7
- 26. Co się dzieje z LOST String obiektów
- 27. Gdzie znajduje się skompilowany kod JIT?
- 28. Co oznacza wyrażenie \ X, gdy znajduje się wewnątrz RegEx?
- 29. Wydajność zapytania; nie wiem, co się dzieje
- 30. INotifyPropertyChanged: co dzieje się za sceną?
Nie będzie żadnego przetwarzania równoległego, ponieważ JavaScript jest pojedynczy wątek. Możesz wysyłać asynchroniczne żądania, ale każde zdarzenie wyzwalane jest w kolejce. – SilverlightFox
@SilverlightFox Tak, masz rację. Myślałem o porządku rzeczy. Może '$ location' może zaktualizować ścieżkę przed wykonaniem pozostałych funkcji, jeśli jest wystarczająco szybki. – Jorg