@state-less/leap-frontend
Version:
A collection of open source fullstack services powered by React Server
25 lines (24 loc) • 491 B
text/typescript
export function wrapPromise<T>(promise: Promise<T>): () => T {
let status = 'pending';
let response: T;
const suspender = promise.then(
(res) => {
status = 'success';
response = res;
},
(err) => {
status = 'error';
response = err;
}
);
return () => {
switch (status) {
case 'pending':
throw suspender;
case 'error':
throw response;
default:
return response;
}
};
}