1

Promise.allブルーバードの仕組みについて根本的な誤解をしている可能性があるため、この質問をしています。

ネストされた依存関係から値を返す方法を理解できませんPromise.alls

ただし、コンソールに表示する目的の結果を得ることができます。(私が返そうとしているデータはコメントで確認できますconsole.log)。

コンテキストとして、関連するブログ投稿のコレクションを取得し、そのうちの 5 つを返すHexoプラグインを作成しています。

各プロミスは、前のプロミスから返されたデータに依存します。

var Promise = require('bluebird')
var _ = require('underscore')

hexo.extend.helper.register("related_posts", function (site) {
  var site = site
  var post = this.page
  var tags = post.tags
  var title = post.title
  var tagList = tags.map(function(tag){
    return tag.name
  })

  // get 5 posts from each group and add them to a posts array
  var PostsArray = []

  Promise.all(tagList).then(function(items){
    items.forEach(function(theTag){
      PostsArray.push(site.tags.findOne({name: theTag}).posts.sort('date', -1).limit(25).toArray())

      Promise.all(PostsArray).then(function(posts){
        var thePosts = _.flatten(posts)
        var finalListOfPosts = []

        thePosts.forEach(function(post){
          if(post.title != title){
            finalListOfPosts.push(post)
          }
        })

        Promise.all(finalListOfPosts).then(function(posts){
          var relatedPosts = _.first(_.shuffle(posts),  5)
          // MY DATA IS CONSOLE.LOGGED AS I WOULD EXPECT
          // BUT HOW DO I RETURN IT?
          console.log(relatedPosts)
        })

      })
    })
  })
});
4

1 に答える 1