I'm trying to figure out the proper way to do promisification - and more specifically using bluebird. I've come up with some code that makes use of new Promises:
function createUser(data) {
return new Promise((resolve, reject) => {
User.createAsync(user)
.then((doc) => {
resolve(doc);
})
.catch((err) => {
reject(err);
});
});
}
function create(data) {
return new Promise((resolve, reject) => {
User.findOneAsync({username: data.username})
.then((user) => {
if (user) {
resolve(`Username ${data.username} is already taken`);
} else {
createUser(data)
.then((user) => {
resolve(user);
})
}
})
.catch((err) => {
reject(err);
});
})
}
But I feel like I'm not getting much out of bluebird this way and after browsing through the documentation it seems like this is something of an anti-pattern that should be avoided. How would I go about making for example this flow more bluebird style or better promisified in general?