UNPKG

simple-pure-utils

Version:

Funciones puras para manipulación de objetos, arreglos, promesas y observables

112 lines 7.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.never = exports.syncFail = exports.syncResolve = exports.SyncPromise = void 0; const is_1 = require("./is"); /**Muy similar al @see Promise pero si el resolve se ejecuta inmediatamente la promesa se resuelve síncronamente * Esto permite obtener el valor de una promesa resuelta sincronamente con el @see syncPromiseValue * Puede convertir una promesa de javascript a un SyncPromise con el @see toSyncPromise, aunque no tendrá el comportamiento síncrono * * Para que una promesa sea sincrona desde su origen debe de ser creada de forma síncrona, ya sea construyendo esta clase o con los metodos para crear promesas como * @see synResolve @see syncFail @see splitPromise * * Note que @see delay(0) no devuelve una promesa síncrona */ class SyncPromise { constructor(executor) { this.resolve = value => { if ((0, is_1.isPromiseLike)(value)) { value.then(this.resolve, this.reject); return; } this.syncResolve(value); }; this.syncResolve = (value) => { this.value = value; this.status = "resolved"; this.callListeners(); }; this.reject = reason => { this.error = reason; this.status = "error"; this.callListeners(); }; this.listeners = []; this.callListeners = () => { for (const l of this.listeners) l(); }; this.status = "pending"; this.callThenArg = (arg) => { if (this.status == "pending") throw new Error("Aun no se puede llamar a los thenArgs"); switch (this.status) { case "resolved": if (arg.onfulfilled) { return arg.onfulfilled(this.value); } return this.value; case "error": if (arg.onrejected) { return arg.onrejected(this.error); } return this.error; } }; executor(this.resolve, this.reject); } then(onfulfilled, onrejected) { switch (this.status) { case "pending": { const onF = onfulfilled; return new SyncPromise((resolve, reject) => { return this.listeners.push(() => { const value = this.callThenArg({ onfulfilled, onrejected }); if (this.status == "resolved" || onrejected) resolve(value); else { reject(value); } }); }); } case "resolved": { if (onfulfilled) { const ret = onfulfilled(this.value); if ((0, is_1.isPromiseLike)(ret)) { return ret; } else { return syncResolve(ret); } } return syncResolve(this.value); } case "error": { if (onrejected) { const ret = onrejected(this.error); if ((0, is_1.isPromiseLike)(ret)) return ret; else return syncResolve(ret); } debugger; return syncFail(this.error); } } } } exports.SyncPromise = SyncPromise; function syncResolve(x) { return new SyncPromise((resolve) => resolve(x)); } exports.syncResolve = syncResolve; function syncFail(reason) { return new SyncPromise((resolve, reject) => reject(reason)); } exports.syncFail = syncFail; /**Una promesa que nunca se resuleve */ exports.never = new Promise(() => { }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvbWlzZS9zcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBcUM7QUFPckM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLFdBQVc7SUFDcEIsWUFBWSxRQUdIO1FBSVQsWUFBTyxHQUF5QyxLQUFLLENBQUMsRUFBRTtZQUNwRCxJQUFJLElBQUEsa0JBQWEsRUFBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEMsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFTSxnQkFBVyxHQUF3QixDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUE7UUFFRCxXQUFNLEdBQTJCLE1BQU0sQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUE7UUFFRCxjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUMvQixrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUNqQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTO2dCQUMxQixDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQTtRQUlELFdBQU0sR0FBcUMsU0FBUyxDQUFDO1FBRXJELGdCQUFXLEdBQUcsQ0FBaUMsR0FBZSxFQUErQyxFQUFFO1lB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