> On Nov 8, 2015, at 1:07 PM, Ashutosh Das <[email protected]> wrote: > > I am using Mongoose with Bluebird library . Here is my code: > > router.route('/:name') > .get(function (req, res) { > var values = []; > Tag.findOneAsync({'name': req.params.name}, {urlId: 1, _id: > 0}).then(function (data) { > data['urlId'].forEach(function (urlId) { > Urls.findByIdAsync(urlId).then(function (result) { > values.push(result); > }).catch(function (err) { > res.status(500).send(err); > }); > }); > }).catch(function (err) { > res.status(500).send(err); > }); > > res.send(values); > }); > > Currently I am gettings empty 'values' array . My question is, how to > organize this code , so that I can get response after 'values.push()' > operation ?
You're making an empty array, starting the find, then sending the array, then
later, filling the array.
You'd move the res.send into the promise chain -- let me suggest a rewrite here:
router.route('/:name').get(function (req, res) {
Tag.findOneAsync({'name': req.params.name}, {urlId: 1, _id:
0}).then(function (data) {
return Promise.all(data['urlId'].map(function (urlId) {
return Urls.findByIdAsync(urlId)
})
}).then(function (values) {
res.send(values);
}, function (err) {
res.status(500).send(err);
});
});
It's nice to think of 'then' as a singular 'map' -- take this value, and
transform it into that value (or a promise of a value or values)
Promise.all resolves a whole array of promises like that set of results of
findByIdAsync.
Aria
--
Job board: http://jobs.nodejs.org/
New group rules:
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/nodejs/C748C88A-BDF8-43EA-A930-79EB65158D04%40dinhe.net.
For more options, visit https://groups.google.com/d/optout.
smime.p7s
Description: S/MIME cryptographic signature
