quindi ho una collezione di messaggiCome usare la promessa per evitare l'inferno di callback?
{
id: String,
comments: [String], # id of Comments
links: [String], #id of Links
}
Commenti: { id: String, commento: String, }
vicini: { id: String, link: String, }
Trova un post con commenti e collegamenti ad esso relativi 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})
})
})
})
Come utilizzare Promise (http://mongoosejs.com/docs/promises.html) per evitare il callback dell'inferno?
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})
})
})
});
sembra esserci buone ......
@Sato - La prima versione qui serializza 'getComments()' e 'getLinks()' che non è necessario. Eseguirli in parallelo (come nella mia risposta) probabilmente andrà meglio. Inoltre, assicurati di capire come eseguire la gestione degli errori nella tua versione non promessa o promessa. – jfriend00
@ jfriend00 hai ragione, ho modificato la mia risposta usando il modulo [Q] (https://www.npmjs.com/package/q), inoltre puoi usare 'Promise.all()' se preferisci. – DJeanCar