YouTip LogoYouTip

Nodejs Promise

Promise is one of the core concepts in Node.js for handling asynchronous operations. Promise provides a more elegant way to manage asynchronous code, avoiding the traditional Callback Hell problem. This article will introduce the concept, usage, and common patterns of Promise in detail. * * * ## What is Promise? Promise is an object that represents the eventual completion or failure of an asynchronous operation. It has three states: 1. **Pending**: Initial state, neither successful nor failed 2. **Fulfilled**: Operation completed successfully 3. **Rejected**: Operation failed !(#) Once the Promise state changes (from pending to fulfilled or rejected), it will not change again. * * * ## Creating Promise In Node.js, you can use the `Promise` constructor to create a new Promise object: ## Example const myPromise =new Promise((resolve, reject)=>{ // Asynchronous operation const success =true;// Assume this is the result of the asynchronous operation if(success){ resolve('Operation successful!');// State becomes fulfilled }else{ reject('Operation failed!');// State becomes rejected } }); * * * ## Using Promise Promise provides `.then()` and `.catch()` methods to handle success and failure cases: ## Example myPromise .then((result)=>{ console.log(result);// Output: "Operation successful!" }) .catch((error)=>{ console.error(error);// Output: "Operation failed!" }); * * * ## Promise Chaining The power of Promise lies in chaining multiple asynchronous operations: ## Example function asyncOperation1(){ return new Promise((resolve)=>{ setTimeout(()=> resolve('Step 1 complete'),1000); }); } function asyncOperation2(data){ return new Promise((resolve)=>{ setTimeout(()=> resolve(`${data}, Step 2 complete`),1000); }); } asyncOperation1() .then((result)=> asyncOperation2(result)) .then((finalResult)=>{ console.log(finalResult);// Output: "Step 1 complete, Step 2 complete" }) .catch((error)=>{ console.error('Error in chain:', error); }); * * * ## Promise Static Methods Promise provides some useful static methods: ### Promise.all() Waits for all Promises to complete, or any Promise to fail: ## Example const promise1 = Promise.resolve('First'); const promise2 = Promise.resolve('Second'); Promise.all([promise1, promise2]) .then((results)=>{ console.log(results);// Output: ['First', 'Second'] }); ### Promise.race() Returns the first Promise to complete or fail: ## Example const promise1 =new Promise((resolve)=> setTimeout(resolve,500,'First')); const promise2 =new Promise((resolve)=> setTimeout(resolve,100,'Second')); Promise.race([promise1, promise2]) .then((result)=>{ console.log(result);// Output: "Second" }); * * * ## Error Handling Promise error handling can be achieved through `.catch()` or the second parameter of `.then()`: ## Example someAsyncFunction() .then( (result)=>{/* Handle success */}, (error)=>{/* Handle failure */} ); // Or someAsyncFunction() .then((result)=>{/* Handle success */}) .catch((error)=>{/* Handle all errors */}); * * * ## async/await Syntax ES2017 introduced async/await syntax, making Promise usage more intuitive: ## Example async function runOperations(){ try{ const result1 = await asyncOperation1(); const result2 = await asyncOperation2(result1); console.log(result2); }catch(error){ console.error(error); } } runOperations(); * * * ## Best Practices 1. **Always handle errors**: Don't ignore `.catch()` or try-catch 2. **Avoid nesting**: Use chaining or async/await to keep code flat 3. **Name Promises meaningfully**: Give Promise variables meaningful names 4. **Return Promise**: Return Promise in functions for chaining
← Js Async AwaitNodejs Nvm β†’