hook use
6/16/2025
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;
  }
}