为了在我的数据库中创建对象,我已经创建了许多类似的承诺。
var createUserPromise = new Promise(
function(resolve, reject) {
User.create({
email: 'toto@toto.com'
}, function() {
console.log("User populated"); // callback called when user is created
resolve();
});
}
);
最后,我希望按照我想要的顺序打电话给我所有的承诺。 (因为某些对象依赖于其他对象,所以我需要保持该顺序)
createUserPromise
.then(createCommentPromise
.then(createGamePromise
.then(createRoomPromise)));
所以我希望看到:
User populated
Comment populated
Game populated
Room populated
不幸的是,这些消息被洗牌,我不明白。
谢谢
答案 0 :(得分:15)
看起来你理解承诺是错误的,重新阅读一些有关承诺和article的教程。
只要您使用new Promise(executor)
创建承诺,就会立即调用它,因此您的所有函数实际上都会在您创建它们时执行,而不是在链接它们时执行。
createUser
实际上应该是一个返回promise而不是promise本身的函数。 createComment
,createGame
,createRoom
也是。
然后你就可以像这样链接它们了:
createUser()
.then(createComment)
.then(createGame)
.then(createRoom)
如果你没有传递回调,mongoose return promises的最新版本,所以你不需要将它包装成一个返回一个promise的函数。
答案 1 :(得分:3)
你应该将你的Promise包装成函数。你正在做的方式,他们马上打电话。
var createUserPromise = function() {
return new Promise(
function(resolve, reject) {
User.create({
email: 'toto@toto.com'
}, function() {
console.log("User populated"); // callback called when user is created
resolve();
});
}
);
};
现在你可以链接Promises,就像这样:
createUserPromise()
.then(createCommentPromise)
.then(createGamePromise)
.then(createRoomPromise);