Reputation: 147
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
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
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
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