इसलिए आपको प्रतिक्रिया भेजने से पहले सभी कॉलबैक के वापस आने का इंतजार करना होगा। यदि हम सरलता के लिए त्रुटि प्रबंधन और खाली परिणामों को अनदेखा करते हैं तो यह निम्न के समान किया जा सकता है:
var callback = function(blogs) {
res.send(blogs);
}
connection.query("SELECT * FROM blogs ORDER BY time DESC", function(err, blogs, fields) {
var pending = blogs.length;
for (blog in blogs) {
connection.query("SELECT * FROM tags WHERE blog_id='blog.id' ", function(err, tags, fields) {
blog.tags = tags;
if (0 === --pending) {
callback(blogs);
}
});
}
});
वादों के साथ, Promise.all फंक्शन देखें जो एक नया वादा लौटाता है। यह वादों का समाधान तब होता है जब सरणी में इसे पारित किए गए सभी वादे हल हो जाते हैं। क्यू पुस्तकालय के साथ यह कुछ इस तरह होना चाहिए:
var getTags = function(blog) {
var deferred = Q.defer();
connection.query("SELECT * FROM tags WHERE blog_id='blog.id' ", function(err, tags, fields) {
blog.tags = tags;
deferred.resolve();
});
return deferred.promise;
}
var promises = blogs.map(getTags(blog));
Q.all(promises).then(res.send(blogs));