javascript中的链承诺

Epi*_*lle 7 javascript mongoose node.js promise

为了在我的数据库中创建对象,我已经创建了许多类似的承诺.

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();
    });
  }
); 
Run Code Online (Sandbox Code Playgroud)

最后,我想按照我想要的顺序打电话给我所有的承诺.(因为某些对象依赖于其他对象,所以我需要保留该顺序)

createUserPromise
  .then(createCommentPromise
    .then(createGamePromise
      .then(createRoomPromise)));
Run Code Online (Sandbox Code Playgroud)

所以我希望看到:

User populated
Comment populated
Game populated
Room populated
Run Code Online (Sandbox Code Playgroud)

不幸的是,这些消息被洗牌,我不明白是什么.

谢谢

nva*_*mei 16

看起来你理解承诺错误,重新阅读一些关于承诺和本文的教程.

一旦你使用创建一个promise new Promise(executor),就会立即调用它,所以你所有的函数实际上都是在你创建它们时执行的,而不是在你链接它们时执行的.

createUser实际应该是一个函数返回一个promise而不是一个promise本身.createComment,createGame,createRoom太.

然后你就可以像这样链接它们:

createUser()
.then(createComment)
.then(createGame)
.then(createRoom)
Run Code Online (Sandbox Code Playgroud)

如果你没有传递回调,那么最新版本的mongoose会返回promises,因此你不需要将它包装到一个返回promise的函数中.