export type PromiseWithStatus<T> = Promise<T> & {
status?: 'pending' | 'fulfilled' | 'rejected';
value?: T;
reason?: any;
};
/**
* mock React Hooks use method
*/
export function use<T>(promise: PromiseWithStatus<T>): T {
if (promise.status === 'fulfilled') {
return promise.value as T;
} else if (promise.status === 'rejected') {
throw promise.reason;
} else if (promise.status === 'pending') {
throw promise;
} else {
promise.status = 'pending';
promise.then(
(result: T) => {
promise.status = 'fulfilled';
promise.value = result;
},
(reason: any) => {
promise.status = 'rejected';
promise.reason = reason;
}
);
throw promise;
}
}
hook use
6/16/2025