0

bluebird の readMe の例に目を通しましたが、非同期コードを実装/変換して .then..

ここには多数の ifStatements がありますが、要点は、 をループしているときに、 がデータベース (findOne) に存在するtoArray場合は、それを変数に割り当てて、新しい ( element.post & .save) db doc.

結果として .save .. の後に findOne を実行する現在の非同期コードは次のとおりですが、前に実行する必要があります。

// create a story (accessed at POST http://localhost:4200/api/v1/story)
.post(function(req, res) {

    console.log('posting a new Story..from: ' + res.locals._id + '..' + res.locals.username );

    var story = new Models.Story();

    var toArray = req.body.to;
    console.log(toArray); // [ 'user1', 'user2', 'user3' ]
    toArray.forEach(toArrayLoop);
    function toArrayLoop(element, index, array){

        console.log('element: ' + element); // 'user1' .. 'user2' .. 'user3'

        var out = false; // if sent to Self, out = true
        if (element == res.locals.username) {out = true; console.log('to element: ' + element + ' == res.locals.username: ' + res.locals.username)}

        var toUserId = '';
        if (element) {
            Models.User.findOne({username: element}, function (err, user) {

                if (user) {

                if (err) {
                    console.log(err);
                    res.send(err);
                }
                    console.log('user._id = ' + user._id);
                    toUserId = user._id;
                } else {
                    toUserId = '';
                    console.log('toUserId = ' + toUserId);
                }

            });
        }

        story.to.push({

            user : toUserId, // push the findOne user._id
            username : element, // push the toArray element
            view :
            {
              inbox: true,
              outbox: out,
              archive: false,
            },
            updated : req.body.nowDatetime

        });

    }

    var archive = false;
    console.log('req.body.archive = ' + req.body.archive);
    if (req.body.archive == 'true') { archive = true; console.log('archive = ' + archive); };

    var in = false;
    toArray.forEach(fromSelfLoop);
    function fromSelfLoop(element, index, array){
        console.log('checking if sent to Self: ' + element); // 'user1' .. if matches res.locals: (sent from/to Self)
        if (element == res.locals.username) {in = true; console.log('from element: ' + element + ' == res.locals.username: ' + res.locals.username)}
    } // if sent to Self, archive = true

    story.from.push({

        user : res.locals._id,
        username : res.locals.username,
        view :
        {
          inbox: in,
          outbox: true,
          archive: archive,
        },
        updated : req.body.nowDatetime

    });

    story.title = req.body.title;
    // ..even more doc val assignments..

    console.log('To: ' + req.body.to);
    console.log('Story: ' + req.body.title);

    story.save(function(err, result) {

        if (err) {
            console.log(err);
            res.send(err);
        }
        console.log("The result: ", result);
            res.json({ message: 'Story "' + story.title + '" Created' });

    });

    console.log('post success!');

})
4

1 に答える 1