当前位置:  开发笔记 > 编程语言 > 正文

javascript中的链承诺

如何解决《javascript中的链承诺》经验,为你挑选了1个好方法。

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

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

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

谢谢



1> nvartolomei..:

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

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

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

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

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

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

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有