For a much detailed answer please follow the documentation links fetch and promises
The 'fetch' function, perform an asynchronous operation, and always return a Promise object.
My purpose, here, is just to clarify something you seems to had not catched and help you to understand better the documentation.
The '.then' are Promise's object method, that call some code when the asynchronous operation is done.
'.then' are call sequentially if the Promise is considered 'resolved', otherwise the '.catch' is call to handle the error.
The return statement in the function passed to '.then' is the imput of the second queued '.then'.
In the example you post, there are 2 queued '.then' just to show it is possible to do it and how to do.
There is no need to use more than one '.then', it is just useful as you could split up the action performed in retrieving data in different steps so you could abort the promise, if you got an error.
This helps to write clean code and debugging, ad you could generalize some actions and reuse, and alzò have more défaillance errors.