Promise chaining means running multiple .then() callbacks one after another. Each .then() waits for the previous Promise to finish and passes its result forward. If a .then() returns a direct value, the next .then() runs immediately with that value. If it returns a Promise, the next .then() waits for that Promise to resolve before running. This lets us write steps that happen in order, even if some are asynchronous. In the example, we start with 1, add 1, then add 1 again asynchronously, and finally log 3. The execution table shows each step clearly, tracking inputs and outputs. This helps beginners see how values flow through the chain.