Subrata Banerjee
Subrata Banerjee

Reputation: 299

Unable to use .then in express framework

I'm new to Express framework and learning, I'm having a problem using .then. The problem is I have 2 functions and I want the first one to complete before the second to start executing. I'm exporting the modules.

var ubm = require('./userBasic');

There are 2 functions setUserData and showUserId, the showUserId must execute only after setUserData has performed its operation.

var userId = ubm.setUserData(userName,userEmail,userDOB,moment);

userId.then(ubm.showUserId(userId));

Below are the 2 functions:

    module.exports = {
                    setUserData: function (userName,userEmail,userDOB,moment){
                              //Performing database activities
                       return userId;
                    }
                    showUserId: function (userId){
                       console.log(userId);
                    }
    }

When i run it says TypeError: Cannot read property 'then' of undefined.

Like I said I'm very new and learning and was unable to figure out the solution. I did some google search and got a brief about promise, but I don't know how to implement here.

Upvotes: 1

Views: 721

Answers (1)

Edward Smith
Edward Smith

Reputation: 552

Try using promises

module.exports = {
  setUserData: function(userName, userEmail, userDOB, moment) {
                 return new Promise(function(resolve, reject) {
                   //db stuff
                   reject(error);
                   resolve(userId);
                 });
               },
  showUserId: function(userId) {
                  console.log(userId);
              };
  };

So in your execution you would write

ubm.setUserData(username, usereEmail, userDOB, moment)
.then((data) => {
  showUserId(data);
})
.catch((err) => {
  console.log(err);
});

A couple of things to note is that in this instance you could just log data without the need for another function like

ubm.setUserData(username, usereEmail, userDOB, moment)
.then((data) => {
  console.log(data);
})
.catch((err) => {
  console.log(err);
});

Whatever value you pass into resolve() will be returned as well as you pass errors into reject().

Upvotes: 1

Related Questions