Skip to content

28 Promise Demo

Biswajit Sundara edited this page Aug 18, 2023 · 1 revision

Lets look into the problem without promise and how can we solve it using promise handling.

1. The Problem

const fetchUser = () => {
    setTimeout(() => {
        username = "Biswajit";
        console.log("User name is " +username);
        return username;
    }, 3000);
}

const fetchRole = (user) => {

    if (user === 'Biswajit') {
        console.log('User role is admin');
    }
    else
        console.log('User role is ' + user);
}

const user = fetchUser();
fetchRole(user);

------------ OUTPUT ------------------
User role is undefined
User name is Biswajit

2. Solution (Promises)

const fetchUser = () => {

    return new Promise((resolve, reject) => {
        setTimeout(() => {
            username = "Biswajit";
            resolve(username);
        }, 3000);

        setTimeout(() => {
            reject('There is an error');
        }, 5000);
    })

}

const fetchRole = (user) => {

    if (user === 'Biswajit') {
        console.log('User role is admin');
    }
    else
        console.log('User role is ' + user);
}

fetchUser().then((data) => {
    console.log('User name is ' + data);
    fetchRole(data);
}).catch((error) => {
    console.log(error);
})

--------------- OUTPUT ------------------
User name is Biswajit
User role is admin

3. Solution (async/await)

const fetchUser = async () => {

    const uname = new Promise((resolve, reject) => {
        setTimeout(() => {
            username = "Biswajit";
            resolve(username);
        }, 2000);

        setTimeout(() => {
            reject('There is an error');
        }, 3000);
    })

    const user = await uname;

    return user;

}

const fetchRole = (user) => {

    if (user === 'Biswajit') {
        console.log('User role is admin');
    }
    else
        console.log('User role is ' + user);
}

const app = async () => {
    try {
        const uname = await fetchUser();
        console.log('User name is ' + uname);
        fetchRole(uname);
    }
    catch (error) {
        console.log(error);
    }
}

app();

------------------ OUTPUT -----------------
User name is Biswajit
User role is admin

Clone this wiki locally