Tôi đang cố gắng thử một phương pháp mất nhiều thời gian cho mục đích thử nghiệm nhưng không thể tìm thấy cách tốt để làm điều này trong Javascript. Bất kỳ phương pháp tiếp cận tốt bên cạnh việc viết một vòng lặp rất dài?Làm cách nào để viết phương thức đồng bộ chặn trong Javascript?
Trả lời
Làm thế nào về a loop that checks time?
function sleep(milliSeconds){
var startTime = new Date().getTime(); // get the current time
while (new Date().getTime() < startTime + milliSeconds); // hog cpu until time's up
}
Nice. Khá rõ ràng trong nhận thức. –
Điều này có thể khiến công cụ JavaScript chặn các luồng khác (các trình duyệt như Firefox <4.0 sẽ không cho phép người dùng chuyển đổi các tab hoặc thực hiện bất kỳ điều gì khác). Cuối cùng, trình duyệt sẽ nhận thấy điều này và chấm dứt tập lệnh của bạn. Không phải là một ý tưởng tốt. –
Hoạt động trong Chrome, đó là tất cả những gì tôi quan tâm. Điều này rõ ràng là không đi vào bất kỳ mã được triển khai nào :) –
Bạn có thể thực hiện cuộc gọi AJAX đồng bộ với máy chủ để xóa phản hồi theo một khoảng thời gian nhất định theo yêu cầu của tập lệnh. Tuy nhiên, lưu ý rằng phương thức này sẽ không hoạt động trong Firefox vì nó không hỗ trợ các cuộc gọi AJAX đồng bộ.
Chỉ cần sử dụng chức năng đơn giản này trên các mặt hàng:
function sleep(microseconds) {
var request = new XMLHttpRequest;
request.open("GET", "/sleep.php?time=" + milliseconds);
request.send();
}
Mã cho sleep.php
ở phía máy chủ:
usleep(intval($_GET("sleep")));
Bây giờ bạn có thể tạo chặn chức năng đồng bộ trong JavaScript (với ngoại lệ của Firefox) như sau:
alert("Hello");
sleep(1000000); // sleep for 1 second
alert("World");
+1 tốt để biết, nhưng quá nhiều công việc :) –
sai với vòng lặp rất dài? hoặc một vòng lặp kiểm tra thời gian? – Joseph
Không có gì sai, chỉ muốn tôi có thể làm một cái gì đó như 'giấc ngủ (mili giây)'. Thật khó để tìm ra vòng lặp lớn cần phải thế nào nhưng không có thử nghiệm và lỗi nào không thể khắc phục được. –
Trong Firefox, bạn có thể sử dụng [trampolining] (http://tobyho.com/2010/12/10/trampolines-in-javascript-and/ "Trampolines trong Javascript và Nhiệm vụ gọi lại ít hơn lồng nhau") để thực hiện cuộc gọi JavaScript không đồng bộ đồng bộ. –