> On Nov 8, 2015, at 1:07 PM, Ashutosh Das <areos...@gmail.com> 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 nodejs+unsubscr...@googlegroups.com.
To post to this group, send email to nodejs@googlegroups.com.
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.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to