I'm trying to understand and master promise but I ran into an issue which I'm not sure if this would be the right way to do things.
I'm using nodejs and I have the following: A database and a module in which I do something with the database. At one point I'm trying to do create a new user in the database and after the user is created to create another entry in another table for that user with other details.
passport.use('local-signup', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
},
function(username, password, done) {
// Before creating the user access Sequlize beforeCreate method so we can encrypt the password
User.beforeCreate(function(req) {
console.log('Encryptying password for user ',req.username)
return encryptPass(req.password)
.then(success => {
req.password = success;
})
.catch(err => {
if (err) console.error(err);
});
});
User.create({
username: username,
password: password
}).then(function(createdUser) {
console.log(createdUser);
UserDetails.create({
id:createdUser.dataValues.id
}).then((data)=>{
console.log(data);
return done(null,createdUser);
}).catch((error)=>{
console.log(error)
return done(error)
})
})
.catch(function(error) {
console.error(error)
return done(`${error.message}.`);
});
}
));
Is this the correct way to use the promises when I have something like this?
Thank you all, based on comments I have ended up with the below code. As much as I tried to avoid callback hell issue it still looks a bit like it but since both promises needs to be called I think it's a good solution and not nesting it to much:
// Local sign-up strategy
passport.use('local-signup', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
},
function(username, password, done) {
// Before creating the user access Sequlize beforeCreate method so we can encrypt the password
User.beforeCreate(function(req) {
console.log('Encryptying password for user ',req.username)
return encryptPass(req.password)
.then(success => {
req.password = success;
})
.catch(err => {
if (err) console.error(err);
});
});
User.create({
username: username,
password: password
}).then(function(createdUser) {
console.log(createdUser);
return createdUser;
}).then((userData) =>{
UserDetails.create({
id:userData.dataValues.id
}).then((userDetails)=>{
return done(null,userData)
})
}).catch(function(error) {
console.error(error)
return done(`${error.message}.`);
});
}
));
Thank you, Victor