Hướng dẫn dùng setinterval JavaScript
Hàm setInterval()Hàm setInterval() của Javascript có nhiệm vụ thực thi hàm xử lý liên tục, sau 1 khoảng thời gian nào đó, tính bằng millisecond. Có nghĩa là cứ sau 1 khoảng thời gian, thì hàm xử lý sẽ được gọi.Cú pháp sử dụng:var boDemThoiGianChayLienTuc = setInterval( function(){ alert("Hello"); }, 3000); Hàm clearInterval()Hàm clearInterval() của Javascript dùng để xóa bộ đếm thời gian chạy liên tục khi không cần sử dụng nữa.Cú pháp sử dụng:clearInterval(boDemThoiGianChayLienTuc); Yêu cầuTạo bộ đếm ngược trong vòng 60s, hiển thị số giây hiện tại ra màn hình cho người dùng xem.
Hướng dẫnHọc JQuery | NenTang.vn Link minh họahttp://frontend-basic.learning.nentang.vn/course-jquery/bai-tap-thuc-thi-mot-ham-xu-ly-lien-tuc-sau-1-khoang-thoi-gian-bang-ham-setInterval/index.htmlVì sao bạn nên cân nhắc trước khi sử dụng window.onload = () => { // đợi tính hiệu nào đó rồi thực thi một số việc // sẽ luôn là lựa chọn tốt nhất }; Nếu ông bà có dạy đợi mua bò mới đi làm chuồng thì đã muộn không đúng trong trường hợp này. CÓ trước hẳn làm gì thì làm. setIntervalVới
Thời gian chạy của hàm
Điều đó có nghĩa, các phương thức khác phía trên stack phải đợi cho đến khi Thêm một ví dụ khác, nếu hàm khai báo bên trong var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:55 Như kết quả ở trên cho thấy, câu var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:551 sẽ liên tục gọi ajax bất kể trước đó đã gọi thành công chưa. Đáng lẽ chúng ta phải kết thúc việc gọi liên tục này, đa phần chúng ta quên var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:552. Nó sẽ tạo ra một hàng đợi dài ngoằn trong stack. Giờ thử một xử lý tuần tự trong var counter = 0; var fakeTimeIntensiveOperation = function() { for (var i =0; i< 50000000; i++) { document.getElementById('random'); } let insideTimeTakingFunction = new Date().toLocaleTimeString(); console.log('insideTimeTakingFunction', insideTimeTakingFunction); } var timer = setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); counter++; if(counter == 1){ fakeTimeIntensiveOperation(); } if (counter >= 5) { clearInterval(timer); } }, 1000); //insideSetInterval 13:50:53 //insideTimeTakingFunction 13:50:55 //insideSetInterval 13:50:55 <---- mất tiêu câu gọi lúc 54 giây //insideSetInterval 13:50:56 //insideSetInterval 13:50:57 //insideSetInterval 13:50:58 Những gì đang diễn ra ở trên, với một thao tác tốn kha khá thời gian xử lý, nó mất hẳn đoạn code var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:551, nôm na là nó bị đứt một nhịp, tình huống này xảy ra với Chrome, nó tạo ra một nhịp mới. Thay vì dùng var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:556 setTimeoutMặc dù cũng chưa hẳn cam kết 100% đoạn code của chúng chạy đúng theo một chu kỳ đã định với đệ quy var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:556. Chí ít nó cũng không gây ra chuyện đưa hàng đống lệnh chờ chạy vào trong stack Khi thực hiện bằng var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:556, bên trong vòng đệ quy chúng ta đã có bước kiểm tra có nên gọi thêm lần nữa không. Lưu ý khi bạn dùng setTimeout, chớ có thực thi hàm đó luôn (kèm dấu var fakeCallToServer = function() { setTimeout(function() { console.log('returning from server', new Date().toLocaleTimeString()); }, 4000); } setInterval(function(){ let insideSetInterval = new Date().toLocaleTimeString(); console.log('insideSetInterval', insideSetInterval); fakeCallToServer(); }, 2000); //insideSetInterval 14:13:47 //insideSetInterval 14:13:49 //insideSetInterval 14:13:51 //returning from server 14:13:51 //insideSetInterval 14:13:53 //returning from server 14:13:53 //insideSetInterval 14:13:55 //returning from server 14:13:559), chúng ta chỉ truyền hàm đó thôi |