| 17 | |
| 18 | // fetch function that returns characters by id |
| 19 | const fetchCharacters = async (ids: ReadonlyArray<number>) => { |
| 20 | console.log(`Fetching characters: ${ids.join(', ')}`) |
| 21 | |
| 22 | const res = await fetch( |
| 23 | `https://rickandmortyapi.com/api/character/[${ids.join(',')}]`, |
| 24 | ) |
| 25 | const characters = (await res.json()) as Array<CharacterT> | CharacterT |
| 26 | |
| 27 | const characterMap = new Map<number, CharacterT>() |
| 28 | for (const character of Array.isArray(characters) |
| 29 | ? characters |
| 30 | : [characters]) { |
| 31 | characterMap.set(character.id, character) |
| 32 | } |
| 33 | |
| 34 | return characterMap |
| 35 | } |
| 36 | |
| 37 | const characterBatcher = new AsyncBatcher<CharacterRequest>( |
| 38 | (requests) => fetchCharacters([...new Set(requests.map(({ id }) => id))]), |