Я задаю этот вопрос, потому что я мог бы иметь фундаментальное непонимание того, как Promise.all
работ Bluebird в:Возврат Значение из вложенных Promise.alls
У меня возникли проблемы с пониманием, как я вернуть значение из вложенных, зависит, Promise.alls
.
I может получить желаемый результат для отображения в консоли. (вы можете увидеть данные, которые я пытаюсь вернуть в комментарии console.log
).
Для контекста, я пишу плагин 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)
})
})
})
})
});
Можете ли вы показать ссылку на документацию 'site.tags.findOne', если есть решение или нет, зависит от того, если что функция isync или нет. –
Спасибо за помощь @ t.niese - к сожалению, эта функция не указана в документах, насколько я могу судить. Я нашел это [здесь] (http://1pixelout.net/2015/09/18/writing-hexo-template-helpers/) –