Javascript required
Skip to content Skip to sidebar Skip to footer

Script.js:48 Uncaught Typeerror: Cannot Read Property 'quote' of Undefined

Author avatar

Resolving the JavaScript Hope Error "TypeError: Cannot Read 'Then' of Undefined"

Deeksha Sharma

Front end End Web Development

Introduction

Working with JavaScript Promise comes with its own array of errors, and a pop one is
TypeError: Cannot read belongings 'then' of undefined.

In this guide, we will embrace two code examples containing a bugs that cause this TypeError and and so refactor the code to resolve the issue.

Case 1

Say you have the part getTaxAmount(price, taxRate) . Information technology takes ii arguments, price and taxRate , calculates the amount of revenue enhancement using the inputs, and is expected to return a Promise that resolves to the calculated tax corporeality.

Next, call getTaxAmount() function with two arguments and log the returned value on the console.

                                      1                    const                                                            getTaxAmount                                                            =                                                            (                    cost                    ,                                          taxRate                    )                                                            =>                                                            {                                                            ii                                                            Math                    .                    floor                    (                    (                    price                                        *                                          taxRate                    )                                                            /                                                            100                    )                    ;                                                            three                                        }                    ;                                                            iv                    v                                        getTaxAmount                    (                    100                    ,                                                            12                    )                    .                    and then                    (                    (                    taxAmount                    )                                                            =>                                                            console                    .                    log                    (                    taxAmount                    )                    )                    ;                                  

js

If you run this buggy code on your browser console or using Node CLI, you volition get this mistake:

                                      1                    TypeError: Cannot read property 'then' of undefined                                  

sh

Case ii

Here's another case. getGithubOrgs(url) is a function that takes a URL and uses Fetch API to go GitHub arrangement information for a given user(deekshasharma). fetch() makes a network asking to the destination URL and returns a Promise that resolves to a response object. The response is and then parsed into a JSON. This part is expected to return a Hope that should resolve to JSON data.

The getGithubOrgs() function is then called with an argument containing a valid URL and logs the resulting JSON on the panel.

                                      1                    office                                                            getGithubOrgs                    (                    url                    )                                                            {                                                            2                                                            fetch                    (                    url                    )                    .                    then                    (                    (                    response                    )                                                            =>                                          response                    .                    json                    (                    )                    )                    ;                                                            three                                        }                                                            iv                    v                                        getGithubOrgs                    (                                                            6                                                            "https://api.github.com/users/deekshasharma/orgs"                                                            vii                                        )                    .                    then                    (                    (                    jsonData                    )                                                            =>                                                            panel                    .                    log                    (                    jsonData                    )                    )                    ;                                  

js

When yous run this code in the browser console, you volition go an fault:

                                      1                    TypeError: Cannot read property 'and then' of undefined                                  

sh

What Causes This TypeError

TypeError - Cannot read property 'and then' of undefined is thrown when the caller is expecting a Promise to be returned and instead receives undefined . Let's consider the above examples.

In Example 1, the getTaxAmount(cost, taxRate) function, when called, should have returned a Promise that resolves to a value of 12 . Currently this function simply calculates the revenue enhancement amount using the 2 inputs and does non render a value. Hence, the undefined value is returned.

In Case ii, the getGithubOrgs(url) office calls the Fetch API, which returns a Hope that resolves to a response object. This resulting Hope is received by the then() method, which parses the response to JSON using the json() method. Finally, then() returns a new Promise that resolves to JSON. But you lot may have noticed there is no return statement inside the getGithubOrgs(url) function, which means the resulting Promise from the then() method is never returned to the calling code.

How to Ready This Fault

To resolve the issue in both code examples, you'll demand to refactor the functions. Allow's look at them one by ane.

Example 1

The function getTaxAmount() should be refactored to the code below.

Hope.resolve() returns a resolved Promise with the value of the tax amount calculated past the function. So the calling lawmaking volition always receive a Hope every bit long equally valid arguments were passed.

                                      one                    const                                                            getTaxAmount                                                            =                                                            (                    cost                    ,                                          taxRate                    )                                                            =>                                                            {                                                            ii                                                            return                                                            Promise                    .                    resolve                    (                    Math                    .                    floor                    (                    (                    price                                        *                                          taxRate                    )                                                            /                                                            100                    )                    )                    ;                                                            three                                        }                    ;                                                            4                    5                                        getTaxAmount                    (                    100                    ,                                                            12                    )                    .                    then                    (                    (                    taxAmount                    )                                                            =>                                                            panel                    .                    log                    (                    taxAmount                    )                    )                    ;                                  

js

Run this code on your browser console or Node CLI, and you should get an ouput of 12 .

Example 2

The function getGithubOrgs(url) should exist refactored to include a return argument and so that a Promise can be returned to the caller.

                                      1                    function                                                            getGithubOrgs                    (                    url                    )                                                            {                                                            2                                                            render                                                            fetch                    (                    url                    )                    .                    then                    (                    (                    response                    )                                                            =>                                          response                    .                    json                    (                    )                    )                    ;                                                            iii                                        }                                                            4                    5                                        getGithubOrgs                    (                    "https://api.github.com/users/deekshasharma/orgs"                    )                    .                    then                    (                    (                    res                    )                                                            =>                                                            half dozen                                                            console                    .                    log                    (                    res                    )                                                            seven                                        )                    ;                                  

js

Conclusion

Whenever you run into this TypeError while working with JavaScript Promise, the first step is to inspect the code that was expected to return a Promise . Subsequently all, yous become this error when calling the then() method on a Hope . And the TypeError indicates you lot are calling so() on undefined , which is a hint that the Promise itself is undefined . The next step is to get and debug the code to figure out why a Promise is not returned. Nosotros looked at two dissimilar lawmaking examples to run across what can potentially crusade this error and how to resolve it.

You tin can read more than about Promise.then() on MDN.

Script.js:48 Uncaught Typeerror: Cannot Read Property 'quote' of Undefined

Source: https://www.pluralsight.com/guides/javascript-promise-typeerror:-cannot-read-then-of-undefined