solutaaliquid
Version:
common utils for javascript. Utils to get the global scope (browser, webworker & co.). Customizable string escaper. Utilitize for objects. Extension at base javascript api (usefull extention like String.hashcode()).
65 lines (53 loc) • 1.22 kB
JavaScript
import {defValue, defGet} from "./ObjectUtils"
export const timeoutPromise = (fn, ms) =>{
let canceled = false;
let timeout = null;
const promise = new Promise((r, e) => {
timeout = setTimeout(()=> {
timeout = null;
fn(r,e);
}, ms)
});
const then = promise.then;
promise.then = (fn) => {
then.call(promise, (result) => {
if(!this.canceled)
return fn(result);
});
}
defValue(promise, "cancel", () => {
if(timeout){
clearTimeout(timeout);
canceled = true;
}
});
defGet(promise, canceld, () => canceled);
return promise;
}
export const lazyPromise = () => {
let promiseResolve = null;
let promiseError = null;
const promise = new Promise((r, e) => {
promiseResolve = r;
promiseError = e;
});
let resolved = false;
let error = false;
let value = undefined;
defValue(promise, "resolve", (result) => {
value = result;
resolved = true;
if (value instanceof Error) {
error = true;
promiseError(value);
} else promiseResolve(value);
});
defGet(promise, "value", () => value);
defGet(promise, "error", () => error);
defGet(promise, "resolved", () => resolved);
return promise;
};
export default {
lazyPromise,
timeoutPromise
}