Retrasar llamadas multifunción usando etiquetas
Esta es la solución con la que trabajo. Retrasará la ejecución en CUALQUIER función que desee . Puede ser la consulta de búsqueda de keydown, tal vez el clic rápido en los botones anteriores o siguientes (que de lo contrario enviaría una solicitud múltiple si se hace clic rápidamente de forma continua, y no se usará después de todo). Esto utiliza un objeto global que almacena cada tiempo de ejecución y lo compara con la solicitud más actual.
Entonces, el resultado es que solo se llamará ese último clic / acción, porque esas solicitudes se almacenan en una cola, que después de X milisegundos se llama si no existe otra solicitud con la misma etiqueta en la cola.
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);
}
Puede establecer su propio tiempo de retraso (es opcional, por defecto es de 500 ms). Y envíe sus argumentos de función en una "moda de cierre".
Por ejemplo, si desea llamar a la función de abajo:
function send_ajax(id){console.log(id);}
Para evitar múltiples solicitudes send_ajax, las retrasa usando:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Cada solicitud que use la etiqueta "fecha de verificación" solo se activará si no se realiza ninguna otra solicitud en el plazo de 600 milisegundos. Este argumento es opcional.
Etiqueta de independencia (llamando a la misma función de destino) pero ejecuta ambos:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Resulta en llamar a la misma función pero las retrasa de forma independiente debido a que sus etiquetas son diferentes