@snipsonian/core
Version:
Core/base reusable javascript code snippets
36 lines (35 loc) • 1.25 kB
JavaScript
import { ONE_MINUTE_IN_MILLIS } from '../time/periodsInMillis';
import { getCurrentTimestamp } from '../date/currentDate';
export default function extendPromise(promise) {
let promiseStatus = 'pending';
let resolveTimestamp = null;
const extendedPromise = promise
.then((resolveData) => {
promiseStatus = 'resolved';
resolveTimestamp = getCurrentTimestamp();
return resolveData;
})
.catch((error) => {
promiseStatus = 'rejected';
throw error;
});
extendedPromise.isPending = () => promiseStatus === 'pending';
extendedPromise.isRejected = () => promiseStatus === 'rejected';
extendedPromise.isResolved = () => promiseStatus === 'resolved';
extendedPromise.wasResolvedPriorTo = ({ minutesAgo }) => {
if (resolveTimestamp === null) {
return false;
}
if (resolveTimestamp < (getCurrentTimestamp() - (minutesAgo * ONE_MINUTE_IN_MILLIS))) {
return true;
}
return false;
};
extendedPromise.getMillisSinceResolved = () => {
if (resolveTimestamp === null) {
return null;
}
return (getCurrentTimestamp() - resolveTimestamp);
};
return extendedPromise;
}