Promise Lifecycle and Chaining
Every promise starts pending and settles once as fulfilled or rejected.
then returns a new promise, enabling linear chains instead of nested callbacks.
Errors thrown in then blocks travel to nearest catch, enabling centralized handling.