Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Question 8 of 10 · Promises and Async/Await
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?