fetch is intended to do asynchronous calls only, but the are some options:
Option 1
If XMLHttpRequest is also fine, then you can use async: false, which will do a synchronous call.
Option 2
Use async/await which is asynchronous under the hood, but feels like it is synchronous, see https://stackoverflow.com/a/54950884/2590616
Option 3
or else I need some way to update the interface when the fetch completes for each component
This sound like fetch + Promise.all() would be a good fit, see https://stackoverflow.com/a/52013616/2590616