Have you seen React Server Components? You mark a component as `async`, and then you `await` some Promise inside of the component to fetch data. The fallback points are declaratively defined through React Suspense. For example:
<Suspense fallback={<LoadingSkeleton />}>
<MyComponent />
</Suspense>Where your Server Component then looks as follows:
async function MyComponent() {
const data = await db.get('...')
return ...
}