Promise chaining in Node.js means linking multiple asynchronous steps so each waits for the previous to finish. We start with a Promise, then add .then() handlers. Each handler receives the resolved value from the previous Promise. If a handler returns a direct value, it is wrapped in a resolved Promise automatically. If it returns a Promise, the chain waits for it to resolve before moving on. This way, you can run async tasks in sequence without nesting. The final .then() runs after all previous Promises resolve, receiving the final result. This example starts with Promise.resolve(1), adds 1 twice through handlers, and logs the final value 3. The execution table shows each step's input, output, and Promise state, helping beginners see how values flow through the chain.