Join blocks until the CompletableFuture completes.
CompletableFuture's join method is used to obtain the result of the computation when it completes, or throw an exception if it fails. Unlike get, join does not require handling checked exceptions, making it cleaner for many cases. In a scenario where multiple API results are needed before proceeding, join ensures that all necessary data has been retrieved before moving on.