Tôi không hoàn toàn rõ ràng những gì bạn đang yêu cầu, nhưng tôi nghĩ rằng Javascript không hoạt động theo cách bạn muốn để nó không thể được thực hiện. Ví dụ, nó không thể được thực hiện mà một cuộc gọi chức năng thường xuyên kéo dài cho đến khi hoạt động hoàn thành hoặc một số tiền nhất định của thời gian nào đến trước. Điều đó có thể được thực hiện bên ngoài javascript và tiếp xúc thông qua javascript (như được thực hiện với các cuộc gọi ajax đồng bộ), nhưng không thể được thực hiện trong javascript thuần túy với các chức năng thông thường.
Không giống như các ngôn ngữ khác, Javascript là chuỗi đơn để trong khi chức năng đang thực hiện bộ hẹn giờ sẽ không bao giờ thực thi (ngoại trừ công nhân web, nhưng chúng rất, rất hạn chế trong những gì họ có thể làm). Bộ hẹn giờ chỉ có thể thực hiện khi hàm kết thúc thực thi. Vì vậy, bạn thậm chí không thể chia sẻ một biến tiến bộ giữa một chức năng đồng bộ và một bộ hẹn giờ vì vậy không có cách nào cho một bộ đếm thời gian để "kiểm tra" tiến độ của một hàm.
Nếu mã của bạn hoàn toàn độc lập (không truy cập bất kỳ biến toàn cầu nào của bạn, không gọi các chức năng khác của bạn và không truy cập DOM), thì bạn có thể chạy nó trên web- nhân viên (chỉ có trong các trình duyệt mới hơn) và sử dụng bộ hẹn giờ trong chuỗi chính. Khi mã công nhân web hoàn thành, nó sẽ gửi một thông báo đến luồng chính với kết quả của nó. Khi chủ đề chính nhận được tin nhắn đó, nó sẽ dừng hẹn giờ. Nếu bộ đếm thời gian kích hoạt trước khi nhận kết quả, nó có thể giết chết nhân viên web. Tuy nhiên, mã của bạn sẽ phải sống với những hạn chế của công nhân web.
soemthing cũng có thể được thực hiện với các hoạt động không đồng bộ (vì họ làm việc tốt hơn với single-ren-Ness Javascript của) như thế này:
- Bắt đầu một hoạt động không đồng bộ như một cuộc gọi ajax hoặc tải một hình ảnh.
- Bắt đầu hẹn giờ bằng cách sử dụng
setTimeout()
cho thời gian chờ của bạn.
- Nếu bộ hẹn giờ kích hoạt trước khi hoạt động không đồng bộ của bạn hoàn tất, hãy dừng hoạt động không đồng bộ (sử dụng API để hủy nó).
- Nếu hoạt động không đồng bộ hoàn tất trước khi hẹn giờ kích hoạt, sau đó hủy hẹn giờ với
clearTimeout()
và tiếp tục.
Ví dụ, dưới đây là cách đặt một thời gian chờ trên tải một hình ảnh:
function loadImage(url, maxTime, data, fnSuccess, fnFail) {
var img = new Image();
var timer = setTimeout(function() {
timer = null;
fnFail(data, url);
}, maxTime);
img.onLoad = function() {
if (timer) {
clearTimeout(timer);
fnSuccess(data, img);
}
}
img.onAbort = img.onError = function() {
clearTimeout(timer);
fnFail(data, url);
}
img.src = url;
}
[ 'window.setTimeout (function_here, number_timeout_milliseconds)'] (https://developer.mozilla.org/en/DOM/window.setTimeout) hoặc 'window.setInterval'? –
Nó không thể được thực hiện, chức năng sẽ không trở lại kiểm soát bất cứ điều gì cho đến khi nó được hoàn thành. – Esailija