A promise represents the result of an asynchronous operation. It provides methods to handle callbacks from async operations. Using promises allows returning results from functions instead of injecting callbacks into low-level code, which provides more control, flexibility, and readable code. Promises get resolved once the async operation occurs and can be fulfilled successfully or rejected. Common promise methods include then(), catch(), and done().