Introduction
The error-first callback convention helps handle errors and results clearly in asynchronous code. It keeps your code organized and easy to understand.
Jump into concepts and practice - no test required
function callback(err, result) {
if (err) {
// handle error
} else {
// use result
}
}import fs from 'fs'; fs.readFile('file.txt', (err, data) => { if (err) { console.error('Error:', err); } else { console.log('File data:', data.toString()); } });
db.query('SELECT * FROM users', (err, rows) => { if (err) { console.error('DB error:', err); } else { console.log('Users:', rows); } });
import fs from 'fs'; function readFileCallback(err, data) { if (err) { console.log('Failed to read file:', err.message); } else { console.log('File content:', data.toString()); } } fs.readFile('example.txt', readFileCallback);
function readFile(callback) {
setTimeout(() => {
callback(null, 'file content');
}, 100);
}
readFile((err, data) => {
if (err) {
console.log('Error:', err);
} else {
console.log('Data:', data);
}
});function getData(callback) {
const error = null;
const result = 'Success';
callback(result, error);
}
getData((err, data) => {
if (err) {
console.log('Error:', err);
} else {
console.log('Data:', data);
}
});function fetchUser(id, callback) {
if (id <= 0) {
callback(new Error('Invalid ID'), null);
} else {
setTimeout(() => {
callback(null, { id, name: 'Alice' });
}, 50);
}
}fetchUser to correctly handle errors and print the user's name or the error message?