一尘不染

javascript中的链许诺

node.js

为了在数据库中创建对象,我已经创建了许多许诺。

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();
    });
  }
);

最后,我要按我想要的顺序履行所有诺言。(因为somes对象依赖于其他对象,所以我需要保持该顺序)

createUserPromise
  .then(createCommentPromise
    .then(createGamePromise
      .then(createRoomPromise)));

所以我希望看到:

User populated
Comment populated
Game populated
Room populated

不幸的是,这些消息被打乱了,我不明白。

谢谢


阅读 213

收藏
2020-07-07

共1个答案

一尘不染

看起来您理解了Promise错误,请重新阅读有关Promise和本文的一些教程。

使用创建承诺后new Promise(executor),它会立即被调用,因此所有函数实际上都是在创建它们时执行的,而不是在链接它们时执行的。

createUser实际上应该是一个返回承诺而不是承诺本身的函数。createCommentcreateGamecreateRoom太。

然后,您将能够像这样将它们链接起来:

createUser()
.then(createComment)
.then(createGame)
.then(createRoom)

如果您不传递回调,则最新版本的猫鼬会返回promise,因此您无需将其包装到一个返回promise的函数中。

2020-07-07