Interview question
How do you convert a callback-based function into a Promise-based one? Callback-based function को Promise-based function में कैसे convert करें?
Answer
Wrapping a callback-style function in a new Promise, calling resolve on success and reject on error, is called 'promisifying'. Node.js also provides util.promisify for this.
// Callback-style function (Node.js style: error-first callback)
function readFileCallback(path, callback) {
fs.readFile(path, 'utf8', (err, data) => {
if (err) callback(err);
else callback(null, data);
});
}
// Manually promisifying
function readFilePromise(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', (err, data) => {
if (err) reject(err);
else resolve(data);
});
});
}
// Usage with async/await
async function main() {
try {
const content = await readFilePromise('file.txt');
console.log(content);
} catch (error) {
console.log('Error:', error);
}
}
// Using Node's built-in util.promisify
const util = require('util');
const fs = require('fs');
const readFileAsync = util.promisify(fs.readFile);
async function main2() {
const content = await readFileAsync('file.txt', 'utf8');
console.log(content);
}
// Generic promisify helper for any error-first callback function
function promisify(fn) {
return function (...args) {
return new Promise((resolve, reject) => {
fn(...args, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
};
}
const readFileAsync2 = promisify(fs.readFile);Callback-style function को नए Promise में wrap करना, success पर resolve और error पर reject call करना, 'promisifying' कहलाता है। Node.js util.promisify भी provide करता है।
function readFileCallback(path, callback) {
fs.readFile(path, 'utf8', (err, data) => {
if (err) callback(err);
else callback(null, data);
});
}
// Manually promisify करना
function readFilePromise(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', (err, data) => {
if (err) reject(err);
else resolve(data);
});
});
}
async function main() {
try {
const content = await readFilePromise('file.txt');
console.log(content);
} catch (error) {
console.log('Error:', error);
}
}
// Node.js built-in util.promisify
const util = require('util');
const readFileAsync = util.promisify(fs.readFile);Was this answer clear?