Làm cách nào để gọi một chức năng cứ sau 5 giây JavaScript?
Chúng tôi có thể quyết định thực hiện một chức năng không phải bây giờ, nhưng tại một thời điểm nhất định sau đó. Đó gọi là “lên lịch cuộc gọi” Show Có hai phương pháp cho nó
Các phương thức này không phải là một phần của đặc tả JavaScript. Nhưng hầu hết các môi trường đều có bộ lập lịch nội bộ và cung cấp các phương thức này. Đặc biệt, chúng được hỗ trợ trên mọi trình duyệt và Node. js cú pháp
Thông số 9Chức năng hoặc một chuỗi mã để thực thi. Thông thường, đó là một chức năng. Vì lý do lịch sử, một chuỗi mã có thể được chuyển, nhưng điều đó không được khuyến nghị. 0Độ trễ trước khi chạy, tính bằng mili giây (1000 ms = 1 giây), theo mặc định 0. 1, 2…Đối số cho hàmChẳng hạn, mã này gọi 3 sau một giây
Với lập luận
Nếu đối số đầu tiên là một chuỗi, thì JavaScript sẽ tạo một hàm từ nó Vì vậy, điều này cũng sẽ làm việc
Nhưng không nên sử dụng các chuỗi, hãy sử dụng các hàm mũi tên thay vì chúng, như thế này
Vượt qua một chức năng, nhưng không chạy nó Các nhà phát triển mới làm quen đôi khi mắc lỗi khi thêm dấu ngoặc _______4_______4 sau hàm
Điều đó không hiệu quả, bởi vì 7 mong đợi một tham chiếu đến một chức năng. Và ở đây 3 chạy hàm, và kết quả thực thi của nó được chuyển đến 7. Trong trường hợp của chúng tôi, kết quả của 3 là 9 (hàm không trả về gì cả), vì vậy không có gì được lên lịchMột cuộc gọi đến 7 trả về một “số nhận dạng bộ đếm thời gian” 1 mà chúng tôi có thể sử dụng để hủy thực thiCú pháp để hủy bỏ
Trong mã bên dưới, chúng tôi lên lịch cho chức năng và sau đó hủy bỏ nó (đã thay đổi ý định). Kết quả là không có gì xảy ra
Như chúng ta có thể thấy từ đầu ra 2, trong trình duyệt, mã định danh bộ đếm thời gian là một số. Trong các môi trường khác, đây có thể là một cái gì đó khác. Chẳng hạn, nút. js trả về một đối tượng hẹn giờ với các phương thức bổ sungMột lần nữa, không có thông số kỹ thuật chung cho các phương pháp này, vì vậy điều đó ổn thôi Đối với trình duyệt, bộ hẹn giờ được mô tả trong HTML Living Standard Phương thức 8 có cú pháp giống như phương thức 7
Tất cả các đối số có cùng một ý nghĩa. Nhưng không giống như 7, chức năng này không chỉ chạy một lần mà thường xuyên sau một khoảng thời gian nhất địnhĐể dừng các cuộc gọi tiếp theo, chúng ta nên gọi 6Ví dụ sau sẽ hiển thị thông báo cứ sau 2 giây. Sau 5 giây, đầu ra bị dừng
Thời gian tiếp tục trong khi Trong hầu hết các trình duyệt, bao gồm cả Chrome và Firefox, bộ đếm thời gian bên trong tiếp tục "tích tắc" trong khi hiển thị 8Vì vậy, nếu bạn chạy đoạn mã trên và không bỏ qua cửa sổ 2 trong một thời gian, thì cửa sổ 2 tiếp theo sẽ được hiển thị ngay khi bạn thực hiện. Khoảng thời gian thực tế giữa các cảnh báo sẽ ngắn hơn 2 giâyCó hai cách để chạy một cái gì đó thường xuyên Một là 8. Cái còn lại là một 7 lồng nhau, như thế này 0 7 ở trên lên lịch cuộc gọi tiếp theo ngay khi kết thúc cuộc gọi hiện tại 4Phương pháp lồng nhau 7 linh hoạt hơn so với phương pháp 8. Bằng cách này, cuộc gọi tiếp theo có thể được lên lịch khác nhau, tùy thuộc vào kết quả của cuộc gọi hiện tạiChẳng hạn, chúng ta cần viết một dịch vụ cứ 5 giây lại gửi một yêu cầu đến máy chủ để yêu cầu dữ liệu, nhưng trong trường hợp máy chủ bị quá tải, nó sẽ tăng khoảng thời gian lên 10, 20, 40 giây… Đây là mã giả 1Và nếu các chức năng mà chúng tôi đang lập lịch sử dụng nhiều CPU, thì chúng tôi có thể đo thời gian thực hiện và lập kế hoạch cho cuộc gọi tiếp theo sớm hay muộn Lồng nhau 7 cho phép đặt độ trễ giữa các lần thực hiện chính xác hơn 8Hãy so sánh hai đoạn mã. Cái đầu tiên sử dụng 8 2Cái thứ hai sử dụng 7 lồng nhau 3Đối với 8, bộ lập lịch nội bộ sẽ chạy 2 cứ sau 100 mili giâyBạn có để ý không? Độ trễ thực giữa các lần gọi 3 cho 8 nhỏ hơn trong mãĐiều đó là bình thường, bởi vì thời gian thực hiện của 3 "tiêu tốn" một phần của khoảng thời gianCó thể quá trình thực thi của 3 kéo dài hơn chúng tôi dự kiến và mất hơn 100 mili giâyTrong trường hợp này, động cơ đợi 3 hoàn thành, sau đó kiểm tra bộ lập lịch và nếu hết thời gian, hãy chạy lại ngay lập tứcTrong trường hợp cạnh, nếu chức năng luôn thực thi lâu hơn _______4_______0 ms, thì các cuộc gọi sẽ diễn ra mà không có khoảng dừng nào cả Và đây là hình ảnh cho 7 lồng nhau 7 lồng nhau đảm bảo độ trễ cố định (ở đây là 100ms)Đó là bởi vì một cuộc gọi mới được lên kế hoạch vào cuối cuộc gọi trước đó Thu gom rác và gọi lại setInterval/setTimeout Khi một chức năng được chuyển vào 1, một tham chiếu nội bộ được tạo cho nó và được lưu trong bộ lập lịch. Nó ngăn chức năng bị thu gom rác, ngay cả khi không có tham chiếu nào khác đến nó 4Đối với 8, hàm sẽ nằm trong bộ nhớ cho đến khi 3 được gọiCó một tác dụng phụ. Một hàm tham chiếu đến môi trường từ vựng bên ngoài, vì vậy, trong khi nó hoạt động, các biến bên ngoài cũng hoạt động. Chúng có thể chiếm nhiều bộ nhớ hơn chính chức năng đó. Vì vậy, khi chúng ta không cần chức năng đã lên lịch nữa, tốt hơn hết là hủy bỏ nó, ngay cả khi nó rất nhỏ Có trường hợp sử dụng đặc biệt. 4, hoặc chỉ 5Điều này lên lịch thực hiện 3 càng sớm càng tốt. Nhưng bộ lập lịch sẽ gọi nó chỉ sau khi tập lệnh hiện đang thực thi hoàn tấtVì vậy, chức năng được lên lịch để chạy “ngay sau” tập lệnh hiện tại Chẳng hạn, điều này xuất ra “Xin chào”, sau đó ngay lập tức “Thế giới” 5Dòng đầu tiên “đặt cuộc gọi vào lịch sau 0ms”. Nhưng bộ lập lịch sẽ chỉ “kiểm tra lịch” sau khi tập lệnh hiện tại hoàn tất, vì vậy, 7 là đầu tiên và 8 – sau nóNgoài ra còn có các trường hợp sử dụng thời gian chờ không độ trễ liên quan đến trình duyệt nâng cao mà chúng ta sẽ thảo luận trong chương Vòng lặp sự kiện. nhiệm vụ vi mô và nhiệm vụ vĩ mô Độ trễ bằng không trên thực tế không phải bằng không (trong trình duyệt) Trong trình duyệt, có giới hạn về tần suất chạy bộ định thời lồng nhau. các nói. “Sau năm bộ hẹn giờ lồng nhau, khoảng thời gian buộc phải ít nhất là 4 mili giây. ” Hãy chứng minh ý nghĩa của nó với ví dụ dưới đây. Cuộc gọi 7 trong đó tự lên lịch lại với độ trễ bằng không. Mỗi cuộc gọi ghi nhớ thời gian thực từ cuộc gọi trước đó trong mảng 0. Sự chậm trễ thực sự trông như thế nào? 6Bộ hẹn giờ đầu tiên chạy ngay lập tức (giống như được viết trong thông số kỹ thuật), và sau đó chúng tôi thấy 1. Độ trễ bắt buộc hơn 4 ms giữa các lần gọi bắt đầu phát huy tác dụngĐiều tương tự xảy ra nếu chúng ta sử dụng 8 thay vì 7. 4 chạy 5 vài lần với độ trễ bằng 0 và sau đó với độ trễ hơn 4 msHạn chế đó có từ thời cổ đại và nhiều chữ viết dựa vào đó, vì vậy nó tồn tại vì lý do lịch sử Đối với JavaScript phía máy chủ, giới hạn đó không tồn tại và tồn tại các cách khác để lên lịch cho một công việc không đồng bộ ngay lập tức, như đối với Node. js. Vì vậy, ghi chú này dành riêng cho trình duyệt
Xin lưu ý rằng tất cả các phương pháp lập lịch trình không đảm bảo độ trễ chính xác Ví dụ: bộ hẹn giờ trong trình duyệt có thể chậm lại vì nhiều lý do
Tất cả những điều đó có thể làm tăng độ phân giải của bộ hẹn giờ tối thiểu (độ trễ tối thiểu) lên 300 mili giây hoặc thậm chí 1000 mili giây tùy thuộc vào cài đặt hiệu suất ở cấp hệ điều hành và trình duyệt Làm cách nào để gọi một hàm cứ sau 5 giây trong JavaScript?Phương thức setInterval() trong JavaScript có thể được sử dụng để thực hiện đánh giá định kỳ biểu thức hoặc gọi hàm JavaScript.
Làm cách nào để gọi hàm sau mỗi 2 giây JavaScript?setTimeout(function() { console. log('Tôi sẽ chạy sau 2 giây nữa');
Làm cách nào để gọi hàm JavaScript nhiều lần?Trả lời. Sử dụng phương thức setInterval() của JavaScript
. Phương thức setInterval() yêu cầu hai tham số đầu tiên thường là hàm hoặc biểu thức và tham số còn lại là độ trễ thời gian tính bằng mili giây.
Làm cách nào để chạy một chức năng mỗi giây trong js?Vì vậy, để gọi hàm mỗi giây, chúng ta cần phải chuyển hàm cho phương thức setInterval và truyền tham số độ trễ là 1000 mili giây tương đương với 1 giây. |