A promise is an object that represents the eventual completion or failure of an asynchronous operation and its resulting value. A promise can be in one of three states: pending, fulfilled, or rejected. Promises provide a structured way to manage asynchronous control flow and handle errors consistently.