Skip to content

Instantly share code, notes, and snippets.

@wilmoore
Last active September 6, 2024 05:39
Show Gist options
  • Save wilmoore/b1a959d0df594163ca542d3717788ff2 to your computer and use it in GitHub Desktop.
Save wilmoore/b1a959d0df594163ca542d3717788ff2 to your computer and use it in GitHub Desktop.
Software Engineering :: Programming :: Languages :: JavaScript :: Promise :: Async-Await :: PromiseToResolve

Software Engineering :: Programming :: Languages :: JavaScript :: Promise :: Async-Await :: PromiseToResolve

⪼ Made with 💜 by Polyglot.

export type Maybe<T> = T | null | undefined;
export type PromiseToResolve<T> = Promise<{ data: Maybe<T> ; error: Maybe<Error> }>;

export const promiseToResolve = <T>(promise: Promise<T>): PromiseToResolve<T> => {
  return new Promise((resolve) => {
    return promise
      .then(data => resolve({ data, error: null }))
      .catch(error => resolve({ data: null, error }));
  });
};

const main = async () => await (await fetch('https://jsonplaceholder.typicode.com/todos/3')).json();

(async () => {
  const { data, error } = await promiseToResolve(main());

  if (error) {
    console.error(error); return;
  }

  console.dir({ data, error});
})();

// (async () => {
//   try {
//       const data = await main();
//       console.log(data);
//   } catch (error) {
//       console.error(error);
//   }
// })();

ResolveOnly Promises

type IPromiseToResolve<T> = Promise<{data: Maybe<T>, error: Maybe<Error>}>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment