java_jazz
java_jazz

Reputation: 147

Error with using Promise function in javascript

I am trying to use a Promise function. The promise function is nested inside the dataService function. And the dataService function has a getData method inside, it defines a promise and then checks , if the number inside generated randomly is greater than 5 then the promise variable executes resolve else its a reject (inbuilt promise parameters). The then property logs the answer. However i am getting errors like - Cannot read property 'then' of undefined and Cannot read property 'resolve' of undefined at Promise.html:19. Please help.

 <html>

 <head>
<title>Promise</title>
</head>

<body>
<script>
   function dataService() {
        var obj = {};
        console.log('inside function');

        obj.getData = function () {
            var promise = new Promise(function(resolve,reject){

                var number = Math.random() * 10;

                if (number > 5) {
                   ( promise.resolve("Resolved promise " + number));

                }
                else
              ( promise.reject("Promise Rejected " + number));

        })};

            return obj;

        }


    var data = dataService();
    console.log(data);

   data.getData()
        .then(function(val) {
            console.log("It has been a success"),
            console.log(val)
         } )
        .catch(function (err) {
                console.log("It has been failed"),
                console.log(err)
        });
  </script>

 </body>

 </html>

Upvotes: 0

Views: 35

Answers (3)

mk010101
mk010101

Reputation: 50

You should return the Promise when the function is called:

function dataService() {
        var obj = {};
        console.log('inside function');

        obj.getData = function () {
            return new Promise(function(resolve,reject){

                var number = Math.random() * 10;

                if (number > 5) {
                   ( resolve("Resolved promise " + number));

                }
                else
              ( reject("Promise Rejected " + number));

        })};

            return obj;

        }


    var data = dataService();
    console.log(data);

   data.getData()
        .then(function(val) {
            console.log("It has been a success"),
            console.log(val)
         } )
        .catch(function (err) {
                console.log("It has been failed"),
                console.log(err)
        });

Upvotes: 1

KarelG
KarelG

Reputation: 5244

You are returning with an object instead of a promise object

obj.getData = function () {
    var promise = new Promise(function(resolve,reject){
    // omitted
    return obj; // <---- culprit.
}

just return with promise instead

obj.getData = function () {
    var promise = new Promise(function(resolve,reject){
    // omitted
    return promise; // <---- changed
}

so that when doing data.getData(), you will receive a Promise object. This object has .then and .catch functions.

Upvotes: 0

Daniel Hilgarth
Daniel Hilgarth

Reputation: 174467

Don't use promise.resolve and promise.reject. Just use resolve and reject.

Also, you need to actually return the promise from your getData function.

Try educating yourself with a tutorial, e.g. this one: https://developers.google.com/web/fundamentals/primers/promises

Upvotes: 0

Related Questions