Nếu tôi thực hiện thay đổi đường dẫn như $location.path('new/path')
, điều gì sẽ xảy ra với mã bên dưới thay đổi đường dẫn này? Theo tôi hiểu, thay đổi đường dẫn không ngăn phần còn lại của mã chạy, nhưng điều gì đang thực sự xảy ra? Mã sẽ kết thúc và chỉ khi đó đường dẫn sẽ thay đổi? Vì vậy, nếu mã này là rất tốn thời gian (nói lưu một cái gì đó đến một máy chủ trên một kết nối mạng chậm), sẽ thay đổi vị trí sẽ được tương tự muộn? Hay mọi thứ sẽ xảy ra song song?
Trả lời
Here's a small test, có vẻ như nó kết thúc chạy mã, sau đó thay đổi vị trí. Có một cái nhìn tại giao diện điều khiển trong jsfiddle, bạn sẽ thấy cả hai vòng lặp đi, nhưng cái khác.
Khi @SilverlightFox chỉ ra, không có xử lý song song trong 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++
}
}
Nếu code in HomeCtrl
is changed để bao gồm một thời gian chờ, vị trí thay đổi đầu tiên vì thời gian chờ phá vỡ dòng chảy của chương trình và lịch trình thời gian chờ thi hành sau các AboutCtrl
thực thi.
//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)
}
Giống như thời gian chờ: thay đổi vị trí ',' chạy vòng lặp, sau đó yêu cầu http kết thúc. Vì vậy, một cuộc gọi ajax để cập nhật cơ sở dữ liệu trên kết nối chậm sẽ không ngăn ứng dụng thay đổi tuyến đường.
//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++;
}
});
Nếu tôi đã thay đổi tuyến đường vì một cuộc gọi mạng, tôi sẽ làm điều đó trong succes/lỗi lời hứa hoặc gọi lại, nếu đó là ý định.
- 1. Điều gì sẽ xảy ra trong Rust khi sử dụng "match" nếu không có gì khớp?
- 2. Điều gì xảy ra với đoạn mã bên dưới trong bản dựng bản phát hành?
- 3. Điều gì sẽ xảy ra khi mongodb hết bộ nhớ?
- 4. Điều gì sẽ xảy ra khi tôi biên dịch?
- 5. Điều gì sẽ xảy ra khi ném ngoại lệ C++?
- 6. Điều gì sẽ xảy ra khi Stack và Heap Collide
- 7. Điều gì sẽ xảy ra với QueueWorker khi TTR hết?
- 8. Điều gì sẽ xảy ra sau khi gói bị bắt?
- 9. Điều gì sẽ xảy ra khi va chạm băm xảy ra trong khóa Từ điển?
- 10. Điều gì sẽ xảy ra nếu if_/3 có?
- 11. Điều gì sẽ xảy ra khi chúng tôi vượt qua hashtable bên trong Collections.synchronizedMap()
- 12. Điều gì sẽ xảy ra với AsyncTasks sau onPause?
- 13. Điều gì sẽ xảy ra nếu tôi ReleaseMutex() hai lần?
- 14. Bao gồm tệp Javascript trong các trang html- điều gì sẽ xảy ra bên dưới trong trình duyệt?
- 15. Điều gì sẽ xảy ra với unique_ptr sau std :: move()?
- 16. Nếu không xóa biến ThreadLocal, Điều gì sẽ xảy ra?
- 17. Sử dụng pin, điều gì sẽ xảy ra?
- 18. điều gì sẽ xảy ra nếu php.ini bị thiếu?
- 19. Touchstart và Nhấp. Điều gì xảy ra dưới mui xe?
- 20. Điều gì sẽ xảy ra khi Qt được biên dịch không có góc và -no-opengl?
- 21. Điều gì sẽ xảy ra với chức năng nội tuyến bên ngoài?
- 22. Điều gì sẽ xảy ra khi bạn đóng ứng dụng bảng điều khiển C++
- 23. Điều gì sẽ xảy ra nếu bạn ném một Ngoại lệ từ bên trong UncaughtExceptionHandler?
- 24. Điều gì sẽ xảy ra với biến "var" bên trong Trình tạo JavaScript?
- 25. chính xác những gì sẽ xảy ra khi `enableProdMode()`
- 26. Điều gì sẽ xảy ra khi bạn liên kết 'this' với chức năng Ember?
- 27. Điều gì đang xảy ra với mã Lisp chung này?
- 28. Điều gì sẽ xảy ra khi chạy AsyncTask khi Hoạt động thay đổi?
- 29. Điều gì sẽ xảy ra khi bạn đóng tệp bằng mã hóa Được bảo vệ trừ khi mở 'của iOS?
- 30. Điều gì xảy ra khi bạn có vòng lặp vô hạn trong mã xem Django?
Sẽ không có bất kỳ xử lý song song nào vì JavaScript là một luồng đơn. Bạn có thể thực hiện các yêu cầu không đồng bộ, nhưng bất kỳ sự kiện nào được kích hoạt đều được xếp hàng đợi. – SilverlightFox
@SilverlightFox Có, bạn là chính xác. Tôi đã suy nghĩ nhiều hơn về thứ tự của sự vật. Có thể '$ location' có thể cập nhật đường dẫn trước khi phần còn lại của hàm thực hiện, nếu nó đủ nhanh. – Jorg