Так у меня есть коллекция сообщенийКак использовать обещание избежать обратного вызова ада?
{
id: String,
comments: [String], # id of Comments
links: [String], #id of Links
}
Комментарии: { ID: String, комментарий: String, }
Ссылки: { ID: String, ссылка: String, }
Найти сообщение с комментариями и ссылками на него по id:
Posts.findOne({id: id}, function(post) {
Comments.find({id: post.id}, function(comments) {
Links.find({id: post.id}, function(links) {
res.json({post: post, comments: comment, links: links})
})
})
})
Как использовать Promise (http://mongoosejs.com/docs/promises.html), чтобы избежать обратного вызова ада?
var query = Posts.findOne({id: id});
var promise = query.exec();
promise.then(function (post) {
var query1 = Comments.find({id: post.id});
var promise1 = query1.exec();
promise1.then(function(comments) {
var query2 = Links.find({id: post.id});
var promise2 = query2.exec();
promise2.then(function(links) {
res.json({post: post, comments: comment, links: links})
})
})
});
кажется не хороший ......
@Sato - первая версия здесь сериализует 'getComments()' и 'getLinks()', что необязательно. Выполнение их параллельно (как в моем ответе), скорее всего, будет работать лучше. Кроме того, убедитесь, что вы понимаете, как выполнять обработку ошибок либо в ваших обещаниях, либо в обещании. – jfriend00
@ jfriend00 Вы правы, я отредактировал свой ответ, используя модуль [Q] (https://www.npmjs.com/package/q), также вы можете использовать 'Promise.all()', если хотите. – DJeanCar