Trì hoãn các cuộc gọi đa chức năng bằng nhãn
Đây là giải pháp tôi làm việc với. Nó sẽ trì hoãn việc thực hiện trên bất kỳ chức năng nào bạn muốn . Nó có thể là truy vấn tìm kiếm phím tắt, có thể là nhấp nhanh vào các nút trước đó hoặc tiếp theo (nếu không thì sẽ gửi nhiều yêu cầu nếu nhấp nhanh liên tục và sau đó không được sử dụng). Điều này sử dụng một đối tượng toàn cầu lưu trữ từng thời gian thực hiện và so sánh nó với yêu cầu mới nhất.
Vì vậy, kết quả là chỉ có lần nhấp / hành động cuối cùng thực sự được gọi, bởi vì những yêu cầu đó được lưu trữ trong hàng đợi, sau khi X mili giây được gọi nếu không có yêu cầu nào khác có cùng nhãn trong hàng đợi!
function delay_method(label,callback,time){
if(typeof window.delayed_methods=="undefined"){window.delayed_methods={};}
delayed_methods[label]=Date.now();
var t=delayed_methods[label];
setTimeout(function(){ if(delayed_methods[label]!=t){return;}else{ delayed_methods[label]=""; callback();}}, time||500);
}
Bạn có thể đặt thời gian trễ của riêng mình (tùy chọn, mặc định là 500ms). Và gửi các đối số chức năng của bạn theo kiểu "đóng cửa".
Ví dụ: nếu bạn muốn gọi hàm dưới đây:
function send_ajax(id){console.log(id);}
Để ngăn nhiều yêu cầu send_ajax, bạn trì hoãn chúng bằng cách sử dụng:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Mọi yêu cầu sử dụng nhãn "ngày kiểm tra" sẽ chỉ được kích hoạt nếu không có yêu cầu nào khác được thực hiện trong khung thời gian 600 triệu giây. Đối số này là tùy chọn
Nhãn độc lập (gọi cùng chức năng đích) nhưng chạy cả hai:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Kết quả trong việc gọi cùng một chức năng nhưng trì hoãn chúng một cách độc lập vì nhãn của chúng khác nhau