Node.js 如何在nodejs的foreach循环中编写顺序执行?

Node.js 如何在nodejs的foreach循环中编写顺序执行?,node.js,mongoose,koa,Node.js,Mongoose,Koa,我对nodejs是新手。请帮助我如何在foreach循环中保存数据并将响应发送回控制器。它返回false而不是return对象。提前谢谢 这是我的代码 var rideStatus = require('../models/ridestatus'); module.exports = { invite_ride: function* (body) { var saved = false; var receivers = body.uids; receivers = r

我对nodejs是新手。请帮助我如何在foreach循环中保存数据并将响应发送回控制器。它返回false而不是return对象。提前谢谢

这是我的代码

var rideStatus = require('../models/ridestatus');
module.exports = {
  invite_ride: function* (body) {
    var saved = false;
    var receivers = body.uids;
    receivers = receivers.split(',').filter(function(n) { return n != 'null'; });
    receivers.forEach(function* (n) {
      yield rideStatus.findOne(
        {$and: [{ride_id: body.rideid}, {receiver_id: receivers}]},
        function(err, doc) {
          if (doc === null) {
            new rideStatus({
              ride_id: body.rideid,
              invited_id: body.userId,
              receiver_id: receivers,
            }).save(function(err1, ridestatus) {
              if (!err1) {
                rideStatus.findOne({_id: ridestatus._id}).
                  populate('ride_id').
                  populate('invited_id').
                  populate('receiver_id').
                  exec(function(err2, user) {
                    // console.log(user);
                    if (user != null) {
                      saved = user;

                    }
                  });
              }
            });
          }
        });
    });
    return saved;
  },
};

由于node.js的异步特性,您的“return save”语句不会等待i/o完成其工作。还请注意,如果要保存多个值,则应返回已保存用户对象的数组

var rideStatus = require('../models/ridestatus');
module.exports = {
    invite_ride: function* (body) {
        var savedUsers = [];
        var receivers = body.uids;
        receivers = receivers.split(',').filter(function(n) { return n != 'null'; });
        var len = receivers.length
        var i=0
        receivers.forEach(function* (n) {
            yield rideStatus.findOne(
                {$and: [{ride_id: body.rideid}, {receiver_id: receivers}]},
                function(err, doc) {
                    if (doc === null) {
                        new rideStatus({
                            ride_id: body.rideid,
                            invited_id: body.userId,
                            receiver_id: receivers,
                        }).save(function(err1, ridestatus) {
                            if (!err1) {
                                rideStatus.findOne({_id: ridestatus._id}).
                                    populate('ride_id').
                                    populate('invited_id').
                                    populate('receiver_id').
                                    exec(function(err2, user) {
                                        // console.log(user);
                                        if (user != null) {
                                            savedUsers.push(user);
                                        }
                                        if(i==len-1)
                                            return savedUsers;
                                        else
                                            i++
                                    });
                            }else{
                                i++
                            }
                        });
                    }else{
                        i++
                    }
            });
        });
    },
};

看看图书馆的链接:

工作很好,非常感谢。不客气,请接受答案;-)