Bird
Raised Fist0
Node.jsframework~5 mins

Promises for cleaner async in Node.js - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a Promise in JavaScript?
A Promise is an object that represents the eventual completion or failure of an asynchronous operation. It helps write cleaner code by avoiding deeply nested callbacks.
Click to reveal answer
beginner
What are the three states of a Promise?
A Promise can be in one of three states: pending (initial state), fulfilled (operation completed successfully), or rejected (operation failed).
Click to reveal answer
beginner
How does the then() method work with Promises?
The then() method is used to specify what to do when a Promise is fulfilled. It takes a callback function that runs with the resolved value.
Click to reveal answer
beginner
What is the purpose of the catch() method in Promises?
The catch() method handles errors or rejections from a Promise. It runs a callback if the Promise is rejected, helping to manage failures cleanly.
Click to reveal answer
intermediate
How do Promises help make asynchronous code cleaner compared to callbacks?
Promises avoid "callback hell" by chaining then() calls instead of nesting callbacks. This makes the code easier to read and maintain.
Click to reveal answer
Which Promise state means the operation is still running?
ARejected
BPending
CFulfilled
DResolved
Which method is used to handle a successful Promise result?
Athen()
Bcatch()
Cfinally()
Dresolve()
What does the catch() method do in a Promise chain?
AReturns the Promise value
BStarts the Promise
CHandles errors or rejections
DCancels the Promise
Which of these is NOT a Promise state?
AResolved
BRejected
CFulfilled
DPending
Why are Promises preferred over nested callbacks?
AThey run faster
BThey avoid using functions
CThey use less memory
DThey make code easier to read and maintain
Explain how Promises improve asynchronous code compared to callbacks.
Think about how you handle success and errors without nesting functions inside each other.
You got /5 concepts.
    Describe the lifecycle of a Promise from creation to completion.
    Imagine waiting for a package delivery: waiting, delivered, or failed.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using Promises in Node.js?
      easy
      A. To store data permanently on disk
      B. To make the program run faster by using multiple CPUs
      C. To write synchronous code only
      D. To handle asynchronous tasks without freezing the program

      Solution

      1. Step 1: Understand asynchronous tasks

        Asynchronous tasks take time and can block the program if not handled properly.
      2. Step 2: Role of Promises

        Promises allow handling these tasks without freezing the program by running code after the task finishes.
      3. Final Answer:

        To handle asynchronous tasks without freezing the program -> Option D
      4. Quick Check:

        Promises manage async tasks = A [OK]
      Hint: Promises help avoid freezing during slow tasks [OK]
      Common Mistakes:
      • Thinking Promises speed up code execution
      • Confusing Promises with synchronous code
      • Believing Promises store data permanently
      2. Which of the following is the correct way to create a Promise in Node.js?
      easy
      A. const p = Promise(() => { resolve(); });
      B. const p = new Promise((resolve, reject) => { /* code */ });
      C. const p = new Promise(resolve, reject);
      D. const p = Promise.new((resolve, reject) => { });

      Solution

      1. Step 1: Check Promise constructor syntax

        The Promise constructor requires a function with two parameters: resolve and reject.
      2. Step 2: Validate each option

        const p = new Promise((resolve, reject) => { /* code */ }); correctly uses new Promise with a function taking resolve and reject.
      3. Final Answer:

        const p = new Promise((resolve, reject) => { /* code */ }); -> Option B
      4. Quick Check:

        Correct Promise syntax = B [OK]
      Hint: Use 'new Promise' with (resolve, reject) function [OK]
      Common Mistakes:
      • Omitting 'new' keyword
      • Passing resolve and reject outside a function
      • Using incorrect Promise constructor syntax
      3. What will the following code output?
      const promise = new Promise((resolve) => {
        setTimeout(() => resolve('Done'), 100);
      });
      promise.then(result => console.log(result));
      console.log('Start');
      medium
      A. Start only
      B. Done\nStart
      C. Start\nDone
      D. Done only

      Solution

      1. Step 1: Understand asynchronous setTimeout

        The setTimeout delays resolve by 100ms, so 'Done' logs after delay.
      2. Step 2: Order of console logs

        'Start' logs immediately, then after 100ms 'Done' logs from the promise.
      3. Final Answer:

        Start\nDone -> Option C
      4. Quick Check:

        Async delay means 'Start' first, then 'Done' [OK]
      Hint: Immediate logs appear before delayed Promise results [OK]
      Common Mistakes:
      • Assuming Promise resolves immediately
      • Expecting 'Done' before 'Start'
      • Ignoring asynchronous behavior of setTimeout
      4. Identify the error in this Promise code:
      const p = new Promise((resolve, reject) => {
        resolve('Success');
        reject('Error');
      });
      p.then(result => console.log(result))
       .catch(error => console.log(error));
      medium
      A. Calling reject after resolve has no effect
      B. Missing catch block for errors
      C. Promise constructor missing 'new' keyword
      D. resolve and reject parameters are reversed

      Solution

      1. Step 1: Understand Promise state changes

        Once a Promise is resolved or rejected, further calls to resolve or reject are ignored.
      2. Step 2: Analyze code behavior

        The code calls resolve first, so reject after that does nothing.
      3. Final Answer:

        Calling reject after resolve has no effect -> Option A
      4. Quick Check:

        Promise settles once; later calls ignored [OK]
      Hint: Promise settles once; ignore calls after resolve/reject [OK]
      Common Mistakes:
      • Expecting both resolve and reject to run
      • Forgetting Promise settles only once
      • Confusing order of resolve and reject calls
      5. You want to run two async tasks one after another using Promises. Which code correctly chains them to run sequentially?
      hard
      A. task1().then(() => task2()).then(result => console.log(result));
      B. Promise.all([task1(), task2()]).then(results => console.log(results));
      C. task1(); task2(); console.log('Done');
      D. task1().catch(() => task2()).then(result => console.log(result));

      Solution

      1. Step 1: Understand sequential chaining

        To run tasks one after another, call the second in the first's .then() callback.
      2. Step 2: Analyze options

        task1().then(() => task2()).then(result => console.log(result)); chains task2 after task1 completes, ensuring order.
      3. Final Answer:

        task1().then(() => task2()).then(result => console.log(result)); -> Option A
      4. Quick Check:

        Chain with .then() for sequential async tasks [OK]
      Hint: Use .then() chaining to run tasks one after another [OK]
      Common Mistakes:
      • Using Promise.all for sequential tasks (runs parallel)
      • Calling tasks without chaining (runs parallel)
      • Misusing catch to run second task