Bird
Raised Fist0
Node.jsframework~20 mins

Reading files asynchronously with callbacks in Node.js - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Async File Reader Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this Node.js asynchronous file read?
Consider the following code snippet that reads a file asynchronously using callbacks. What will be printed to the console?
Node.js
import { readFile } from 'node:fs';

readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.log('Error:', err.message);
  } else {
    console.log('File content:', data);
  }
});

console.log('Read request sent');
AError: ENOENT: no such file or directory, open 'example.txt'\nRead request sent
BFile content: (contents of example.txt)\nRead request sent
CRead request sent\nFile content: (contents of example.txt)
DRead request sent
Attempts:
2 left
💡 Hint
Remember that readFile is asynchronous and the callback runs after the main thread continues.
component_behavior
intermediate
2:00remaining
What happens if the callback is missing in readFile?
What will happen if you call readFile without providing a callback function?
Node.js
import { readFile } from 'node:fs';

readFile('example.txt', 'utf8');
AA TypeError is thrown because callback is required.
BThe program crashes with an unhandled exception.
CNothing happens; the file is not read.
DThe file is read and data is returned synchronously.
Attempts:
2 left
💡 Hint
Check the Node.js documentation for readFile function signature.
🔧 Debug
advanced
2:00remaining
Why does this callback not print the file content?
This code tries to read a file and print its content but only prints 'Read request sent'. What is the issue?
Node.js
import { readFile } from 'node:fs';

readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
  }
});

console.log('Read request sent');
AThe callback does not print the data when there is no error.
BThe file path is incorrect causing silent failure.
CThe encoding option 'utf8' is invalid causing no data.
DThe console.log outside the callback blocks the callback from running.
Attempts:
2 left
💡 Hint
Look at what the callback does when there is no error.
📝 Syntax
advanced
2:00remaining
Which option correctly reads a file asynchronously with a callback?
Select the code snippet that correctly reads 'data.txt' asynchronously and logs its content or error.
AreadFile('data.txt', (data, err) => { if (err) throw err; console.log(data); });
BreadFile('data.txt', (err, data) => { if (err) throw err; console.log(data); });
CreadFile('data.txt', 'utf8', (data, err) => { if (err) throw err; console.log(data); });
DreadFile('data.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); });
Attempts:
2 left
💡 Hint
Check the order of parameters in the callback and the encoding argument.
state_output
expert
2:00remaining
What is the value of 'result' after this asynchronous readFile call?
Given this code, what will be the value of 'result' after execution?
Node.js
import { readFile } from 'node:fs';

let result = '';

readFile('file.txt', 'utf8', (err, data) => {
  if (!err) {
    result = data;
  }
});

console.log(result);
AThrows a ReferenceError.
BAn empty string.
Cundefined.
DThe content of 'file.txt' as a string.
Attempts:
2 left
💡 Hint
Remember that readFile is asynchronous and console.log runs before the callback.

Practice

(1/5)
1. What is the main purpose of using fs.readFile with a callback in Node.js?
easy
A. To delete a file from the system
B. To write data to a file synchronously
C. To create a new directory
D. To read a file asynchronously without blocking the program

Solution

  1. Step 1: Understand fs.readFile role

    fs.readFile reads files without stopping other code from running.
  2. Step 2: Recognize asynchronous behavior

    Using a callback means the program continues while the file is read, improving speed.
  3. Final Answer:

    To read a file asynchronously without blocking the program -> Option D
  4. Quick Check:

    Asynchronous reading = non-blocking file read [OK]
Hint: Remember: async means non-blocking, callback runs after reading [OK]
Common Mistakes:
  • Confusing reading with writing files
  • Thinking fs.readFile is synchronous
  • Ignoring the callback function
2. Which of the following is the correct syntax to read a file named data.txt asynchronously using fs.readFile with a callback?
easy
A. fs.readFile('data.txt');
B. fs.readFile('data.txt', data => { console.log(data); });
C. fs.readFile('data.txt', (err, data) => { if (err) throw err; console.log(data); });
D. fs.readFile('data.txt', (data, err) => { if (err) throw err; console.log(data); });

Solution

  1. Step 1: Check callback parameters order

    The callback receives err first, then data.
  2. Step 2: Verify error handling and usage

    fs.readFile('data.txt', (err, data) => { if (err) throw err; console.log(data); }); correctly checks for error and logs data inside the callback.
  3. Final Answer:

    fs.readFile('data.txt', (err, data) => { if (err) throw err; console.log(data); }); -> Option C
  4. Quick Check:

    Callback params = (err, data) [OK]
Hint: Callback always has error first, then data [OK]
Common Mistakes:
  • Swapping error and data parameters
  • Omitting the callback function
  • Not handling errors inside callback
3. What will be the output of the following code if example.txt contains the text "Hello World"?
const fs = require('fs');
fs.readFile('example.txt', (err, data) => {
  if (err) {
    console.log('Error reading file');
  } else {
    console.log(data.toString());
  }
});
medium
A. Error reading file
B. Hello World
C. [object Object]
D. undefined

Solution

  1. Step 1: Understand callback behavior

    If no error, data contains file content as a Buffer.
  2. Step 2: Convert Buffer to string

    data.toString() converts Buffer to readable text, so it prints "Hello World".
  3. Final Answer:

    Hello World -> Option B
  4. Quick Check:

    Buffer.toString() = file text [OK]
Hint: Use toString() to read file content as text [OK]
Common Mistakes:
  • Printing Buffer object directly without conversion
  • Ignoring error handling
  • Expecting synchronous output
4. Identify the error in this code snippet that reads a file asynchronously:
const fs = require('fs');
fs.readFile('notes.txt', (data, err) => {
  if (err) {
    console.error('Failed to read file');
  } else {
    console.log(data.toString());
  }
});
medium
A. The callback parameters are reversed; error should be first
B. Missing encoding option in readFile
C. Using console.error instead of console.log
D. File path should be absolute

Solution

  1. Step 1: Check callback parameter order

    The callback must have err as first parameter, then data.
  2. Step 2: Understand impact of reversed parameters

    Reversing causes data to receive error and err to receive data, breaking error check.
  3. Final Answer:

    The callback parameters are reversed; error should be first -> Option A
  4. Quick Check:

    Callback params order = (err, data) [OK]
Hint: Error always comes first in callback parameters [OK]
Common Mistakes:
  • Swapping error and data parameters
  • Not handling errors properly
  • Assuming encoding is mandatory
5. You want to read multiple files asynchronously and log their contents in order: file1.txt, file2.txt, and file3.txt. Which approach correctly ensures the files are read and logged in sequence using callbacks?
hard
A. Call fs.readFile for each file inside the previous file's callback
B. Call fs.readFile for all files at once without nesting callbacks
C. Use synchronous fs.readFileSync for all files
D. Use fs.readFile with promises instead of callbacks

Solution

  1. Step 1: Understand asynchronous reading order

    Calling fs.readFile without nesting may log files out of order.
  2. Step 2: Use nested callbacks to enforce sequence

    Reading each file inside the previous file's callback ensures order.
  3. Final Answer:

    Call fs.readFile for each file inside the previous file's callback -> Option A
  4. Quick Check:

    Nested callbacks = ordered async reads [OK]
Hint: Nest callbacks to keep async file reads in order [OK]
Common Mistakes:
  • Calling all reads at once expecting order
  • Using synchronous reads in async code
  • Confusing promises with callbacks