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

我是nodejs的新手。 请帮助我如何将数据保存在foreach循环中,并将响应发回给controller.it返回false不返回对象。 提前致谢

这是我的代码

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的asynchronous特性,你的“return save”语句不会等待你的I / O来完成他的工作。 还要注意如果你有多个值要保存,你应该返回一个保存的Users对象的数组。

 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++ } }); }); }, }; 

看链接上的库: async