Skip to content
Please note that GitHub no longer supports Internet Explorer.

We recommend upgrading to the latest Microsoft Edge, Google Chrome, or Firefox.

Learn more

Instantly share code, notes, and snippets.

Embed
What would you like to do?
type GetValueFn<TIdentity, TValue> = (id: TIdentity) => Promise<TValue>;
type KeyValueObject<TValue> = { [key: string]: TValue };
const getObject = <TIdentity, TValue>(
getValue: GetValueFn<TIdentity, TValue>
) => async (itemIds: Array<TIdentity>): Promise<KeyValueObject<TValue>> => {
return Object.fromEntries(
await Promise.all(
itemIds.map(async itemId => [itemId, await getValue(itemId)])
)
);
};
type Movie = Readonly<{ id: number; title: string }>;
const getMovie = async (id: number): Promise<Movie> => {
switch (id) {
case 1:
return { id, title: "Avengers: Endgame" };
case 2:
return { id, title: "Toy Story 4" };
case 3:
return { id, title: "The Lion King" };
case 4:
return { id, title: "Aladdin" };
case 5:
return { id, title: "Captain Marvel" };
}
throw new Error("No movie could be found with this id.");
};
(async (): Promise<void> => {
const getMovies = getObject(getMovie);
const movies = await getMovies([1, 2, 3]);
// {
// 1: { id: 1, title: "Avengers: Endgame" },
// 2: { id: 2, title: "Toy Story 4" },
// 3: { id: 3, title: "The Lion King" },
// }
console.log(movies);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.