I've created many promises like that, in order to create object in my database.
var createUserPromise = new Promise(
function(resolve, reject) {
User.create({
email: '[email protected]'
}, function() {
console.log("User populated"); // callback called when user is created
resolve();
});
}
);
At the end, I want call all my promises in the order I want. (because somes object depend of other, so I need to keep that order)
createUserPromise
.then(createCommentPromise
.then(createGamePromise
.then(createRoomPromise)));
So I expect to see :
User populated
Comment populated
Game populated
Room populated
Unfortunately, this messages are shuffled and I don't understand what.
Thanks
Looks like you understood promises wrong, re-read some tutorials on promises and this article.
As soon as you create a promise using new Promise(executor)
, it is invoked right away, so all your function actually are executed as you create them and not when you chain them.
createUser
actually should be a function returning a promise and not a promise itself. createComment
, createGame
, createRoom
too.
Then you will be able to chain them like this:
createUser()
.then(createComment)
.then(createGame)
.then(createRoom)
Latest versions of mongoose return promises if you don't pass callbacks, so you don't need to wrap it into a function returning a promise.
You should wrap your Promises into functions. The way you're doing, they are called right away.
var createUserPromise = function() {
return new Promise(
function(resolve, reject) {
User.create({
email: '[email protected]'
}, function() {
console.log("User populated"); // callback called when user is created
resolve();
});
}
);
};
Now you can chain Promises, like this:
createUserPromise()
.then(createCommentPromise)
.then(createGamePromise)
.then(createRoomPromise);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With