Node.js 如何在nodejs的foreach循环中编写顺序执行?
我对nodejs是新手。请帮助我如何在foreach循环中保存数据并将响应发送回控制器。它返回false而不是return对象。提前谢谢 这是我的代码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
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++
}
});
});
},
};
看看图书馆的链接:工作很好,非常感谢。不客气,请接受答案;-)