simple-pure-utils
Version:
Funciones puras para manipulación de objetos, arreglos, promesas y observables
52 lines • 3.73 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.debounceSync = void 0;
const rx = require("rxjs");
/**El mismo comportamiento que el debounce, pero cuando la promesa se resuelve inmediatamente, devuelve el valor de forma síncrona,
* este comportamiento no lo tiene el debounce de RxJS, ya que si devuelve una promesa ya resuelta aún así el valor se pospone hasta el siguiente evento de JS
* */
function debounceSync(timeFunc) {
return (obs) => new rx.Observable(subs => {
let cancelar = false;
/**Si hay un valor pendiente de reportar */
let pendiente = undefined;
let current = 0;
const ReportarPendiente = () => {
if (pendiente && !cancelar) {
//Reportamos el ultimo valor si es que falta:
subs.next(pendiente.x);
pendiente = undefined;
}
};
const ret = obs.subscribe(next => {
if (cancelar)
return;
let promesaInmediata = true;
current++;
const currProm = current;
const onPromise = () => {
//Si esta promesa es vieja, no hace nada:
if (currProm != current)
return;
///Llamamos inmediatamente al next
ReportarPendiente();
};
pendiente = { x: next };
const prom = timeFunc(next);
prom.then(onPromise);
//Si la ejecución del onPromise es después de este punto, la promesa no fue instantánea:
promesaInmediata = false;
}, error => {
ReportarPendiente();
subs.error(error);
cancelar = true;
}, () => {
ReportarPendiente();
subs.complete();
cancelar = true;
});
return ret;
});
}
exports.debounceSync = debounceSync;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVib3VuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQTJCO0FBRTNCOztNQUVNO0FBQ04sU0FBZ0IsWUFBWSxDQUFJLFFBQXFDO0lBQ2pFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQyxJQUFJLFFBQVEsR0FBWSxLQUFLLENBQUM7UUFDOUIsMkNBQTJDO1FBQzNDLElBQUksU0FBUyxHQUF5QixTQUFTLENBQUM7UUFDaEQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO1lBQzNCLElBQUksU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4Qiw2Q0FBNkM7Z0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixTQUFTLEdBQUcsU0FBUyxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QixJQUFJLFFBQVE7Z0JBQ1IsT0FBTztZQUVYLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtnQkFDbkIseUNBQXlDO2dCQUN6QyxJQUFJLFFBQVEsSUFBSSxPQUFPO29CQUNuQixPQUFPO2dCQUVYLGtDQUFrQztnQkFDbEMsaUJBQWlCLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUM7WUFFRixTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckIsd0ZBQXdGO1lBQ3hGLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUU3QixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDUCxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ0osaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBaERELG9DQWdEQyJ9
;