Every promise starts as pending. It transitions to either fulfilled (resolved with a value) or rejected (failed with an error).
Once settled (fulfilled or rejected), a promise never changes state. It's immutable. You can attach handlers before or after settlement. Late handlers run immediately with the settled value.