In Next.js server components, fetching data uses the fetch API with async/await. The component starts rendering, calls fetch to get data from an API, and waits for the response. Then it parses the JSON data and uses it to render JSX. Finally, the server sends the fully rendered HTML to the client. This means the client sees the final content immediately without extra loading. The execution table shows each step: starting render, fetching, awaiting response, parsing JSON, rendering JSX, and sending HTML. Variables like 'res' and 'data' change from undefined to promises to actual data objects as the code runs. Beginners often wonder why 'await' is needed and if the client sees the fetch call. The answer is that 'await' pauses execution until data is ready, and the client only gets the rendered HTML, not the fetch process. If 'await' is missing, the component tries to render before data arrives, showing a Promise instead of real content.