Bạn có thể thực hiện một chức năng ẩn danh và gọi ngay lập tức, ngoại trừ bạn sử dụng hàm setTimeout thay vì setInterval.
(function doStuff() {
//Do Stuff Here
setTimeout(doStuff,20000);
})();
Điều này sẽ thực hiện chức năng, sau đó gọi lại sau 20 giây.
Lưu ý rằng tùy thuộc vào hành vi bạn mong muốn hoặc trong một số trường hợp để thực hiện, có thể tốt hơn khi sử dụng setTimeout trên setInterval. Sự khác biệt chính là các cuộc gọi setInterval có chức năng bất cứ khi nào timeout đó hết, REGARDLESS nếu cuộc gọi cuối cùng đã kết thúc thực hiện hoặc nếu xảy ra lỗi. Sử dụng setTimeout là thời trang này đảm bảo rằng chức năng kết thúc thực hiện của nó trước khi bộ đếm thời gian reset. Rất nhiều sự cân bằng là khá rõ ràng, nhưng nó là một điều tốt để ghi nhớ khi bạn thiết kế ứng dụng của bạn.
EDIT Để đáp lại mối quan tâm của patrick dw về việc cần phải hủy thời gian chờ.Giải pháp tốt nhất là không sử dụng các chức năng ẩn danh, và chỉ cần gọi nó sau khi khai
var timeout;
function doStuff() {
//doStuff
timeout = setTimeout(doStuff,20000);
}
doStuff()
Có điều này cũng tương tự như những gì các OP đã cố gắng để tránh, nhưng nó không loại bỏ sự cần thiết phải gọi hàm và sau đó gọi Hàm setInterval, vì vậy bạn lưu một dòng mã. Bạn có thể dừng và bắt đầu chức năng bất cứ lúc nào bằng cách:
//Stop it
clearTimeout(timeout);
//Start it
doStuff();
Điều cần biết. Cảm ơn! – Andrew