Bird
Raised Fist0
Javascriptprogramming~20 mins

Then and catch methods in Javascript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Promise Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Promise chaining with then and catch
What is the output of this code snippet?
Javascript
Promise.resolve(5)
  .then(x => x * 2)
  .then(x => { throw new Error('Oops'); })
  .catch(e => 'Error caught')
  .then(x => x + ' done')
  .then(console.log);
AUncaught Error
BOops done
C10 done
DError caught done
Attempts:
2 left
💡 Hint
Remember catch handles errors and passes its return value to the next then.
❓ Predict Output
intermediate
2:00remaining
Error propagation in promise chains
What will be logged by this code?
Javascript
Promise.reject('fail')
  .then(() => 'success')
  .catch(err => err)
  .then(console.log);
Asuccess
BUncaught Error
Cfail
Dundefined
Attempts:
2 left
💡 Hint
Catch returns the error string, which is passed to the next then.
❓ Predict Output
advanced
2:00remaining
Multiple catch blocks in promise chain
What is the output of this code?
Javascript
Promise.resolve('start')
  .then(val => { throw 'error1'; })
  .catch(err => {
    console.log('Caught:', err);
    throw 'error2';
  })
  .catch(err => console.log('Caught again:', err));
ACaught: error1
BCaught: error1\nCaught again: error2
CCaught again: error2
DUncaught error1
Attempts:
2 left
💡 Hint
A catch can throw again to be caught by another catch.
🧠 Conceptual
advanced
2:00remaining
Promise then return values
Which option correctly describes what happens when a then callback returns a promise?
AThe next then waits for the returned promise to resolve before running.
BThe next then runs immediately ignoring the returned promise.
CThe returned promise is ignored and the next then receives undefined.
DThe chain breaks and no further thens run.
Attempts:
2 left
💡 Hint
Think about how promise chaining works with promises returned inside then.
❓ Predict Output
expert
3:00remaining
Complex promise chain with nested then and catch
What is the final output logged by this code?
Javascript
Promise.resolve(1)
  .then(x => x + 1)
  .then(x => {
    return Promise.reject('fail at step 3');
  })
  .catch(err => {
    console.log('Caught:', err);
    return 10;
  })
  .then(x => x * 2)
  .then(x => { throw 'final error'; })
  .catch(err => console.log('Final catch:', err));
ACaught: fail at step 3\nFinal catch: final error
BFinal catch: final error
CCaught: fail at step 3
DUncaught final error
Attempts:
2 left
💡 Hint
Follow the chain carefully, noting where errors are caught and what values are returned.

Practice

(1/5)
1. What does the then method do in JavaScript promises?
easy
A. Creates a new promise
B. Runs when the task fails
C. Stops the promise from running
D. Runs when the task finishes successfully

Solution

  1. Step 1: Understand the role of then

    The then method is used to handle the result when a promise completes successfully.
  2. Step 2: Differentiate from catch

    The catch method handles errors or failures, not success.
  3. Final Answer:

    Runs when the task finishes successfully -> Option D
  4. Quick Check:

    then = success handler [OK]
Hint: Remember: then = success, catch = failure [OK]
Common Mistakes:
  • Confusing then with catch
  • Thinking then stops the promise
  • Believing then creates a new promise
2. Which of the following is the correct syntax to add a catch handler to a promise named p?
easy
A. catch(p, () => console.log('Error'))
B. p.then.catch(() => console.log('Error'))
C. p.catch(() => console.log('Error'))
D. p.catch = () => console.log('Error')

Solution

  1. Step 1: Recall correct catch syntax

    The catch method is called directly on the promise object like p.catch(callback).
  2. Step 2: Check each option

    p.catch(() => console.log('Error')) uses correct syntax. p.then.catch(() => console.log('Error')) chains incorrectly. p.catch = () => console.log('Error') tries to assign catch as a property. catch(p, () => console.log('Error')) uses invalid function call.
  3. Final Answer:

    p.catch(() => console.log('Error')) -> Option C
  4. Quick Check:

    Use promise.catch() syntax [OK]
Hint: Use promise.catch(callback) to handle errors [OK]
Common Mistakes:
  • Chaining catch after then incorrectly
  • Assigning catch as a property
  • Using catch as a standalone function
3. What will be the output of this code?
Promise.resolve('Hello')
  .then(msg => msg + ' World')
  .then(console.log)
  .catch(() => console.log('Error'));
medium
A. Hello
B. Hello World
C. Error
D. undefined

Solution

  1. Step 1: Follow promise resolution

    The promise resolves with 'Hello'. The first then adds ' World' to it, resulting in 'Hello World'.
  2. Step 2: Output from second then

    The second then logs the result 'Hello World'. The catch is not called because no error occurs.
  3. Final Answer:

    Hello World -> Option B
  4. Quick Check:

    Promise resolves + then chains = 'Hello World' [OK]
Hint: then chains transform and pass values forward [OK]
Common Mistakes:
  • Expecting catch to run without error
  • Ignoring value returned by first then
  • Thinking console.log returns undefined
4. Identify the error in this code snippet:
fetch('url')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.log('Error:', error));

fetch('url')
  .then(response => response.json())
  .catch(error => console.log('Error:', error))
  .then(data => console.log(data));
medium
A. The second chain logs data even if fetch fails
B. The first chain has wrong catch placement
C. Both chains are correct
D. fetch cannot be chained with then and catch

Solution

  1. Step 1: Analyze first chain

    The first chain calls then twice and catch last, so errors are caught properly.
  2. Step 2: Analyze second chain

    The second chain calls catch before the last then. So even if fetch fails, the last then runs with undefined data, causing possible issues.
  3. Final Answer:

    The second chain logs data even if fetch fails -> Option A
  4. Quick Check:

    Catch before then can cause unexpected data [OK]
Hint: Place catch last to handle errors before then [OK]
Common Mistakes:
  • Placing catch before then incorrectly
  • Assuming catch stops later then calls
  • Ignoring promise chain order
5. You want to fetch user data and then fetch their posts only if the user fetch succeeds. Which code correctly uses then and catch to do this?
hard
A. fetchUser() .then(user => fetchPosts(user.id)) .then(posts => console.log(posts)) .catch(err => console.log('Error:', err));
B. fetchUser() .catch(err => console.log('Error:', err)) .then(user => fetchPosts(user.id)) .then(posts => console.log(posts));
C. fetchUser() .then(user => fetchPosts(user.id)) .catch(err => console.log('Error:', err)) .then(posts => console.log(posts));
D. fetchUser() .then(user => fetchPosts(user.id)) .catch(err => console.log('Error:', err)) .catch(err => console.log('Another error:', err));

Solution

  1. Step 1: Understand chaining for dependent tasks

    We want to fetch posts only if user fetch succeeds, so fetchPosts must be inside the first then.
  2. Step 2: Place catch at the end

    Catch should be last to handle any error from either fetchUser or fetchPosts.
  3. Final Answer:

    fetchUser().then(user => fetchPosts(user.id)).then(posts => console.log(posts)).catch(err => console.log('Error:', err)); -> Option A
  4. Quick Check:

    Chain then for success, catch last for errors [OK]
Hint: Chain dependent tasks in then, catch errors last [OK]
Common Mistakes:
  • Placing catch before all then calls
  • Calling then after catch causing unexpected runs
  • Using multiple catch handlers unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard