An async function can suspend at await and resume after the awaited Promise settles. A rejected Promise becomes a thrown error at that await expression, so a surrounding try and catch can handle it. Returning the Promise directly from inside try has a different effect: the function may leave the try block before the rejection arrives. Cleanup belongs in finally when it must run after either success or failure. You will also process adjustments in sequence when each step depends on the previous running total. Keep the error outcome explicit, and distinguish it from a valid empty result. A successful HTTP response or resolved text can still fail later validation.