为了在我的数据库中创建对象,我已经创建了许多类似的承诺.
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
不幸的是,这些消息被洗牌,我不明白是什么.
谢谢
看起来你理解承诺错误,重新阅读一些关于承诺和本文的教程.
一旦你使用创建一个promise new Promise(executor)
,就会立即调用它,所以你所有的函数实际上都是在你创建它们时执行的,而不是在你链接它们时执行的.
createUser
实际应该是一个函数返回一个promise而不是一个promise本身.createComment
,createGame
,createRoom
太.
然后你就可以像这样链接它们:
createUser() .then(createComment) .then(createGame) .then(createRoom)
如果你没有传递回调,那么最新版本的mongoose会返回promises,因此你不需要将它包装到一个返回promise的函数中.