Javascript 要在node.js中同步发送请求吗
我有一个场景,我想从集合中获取数据并插入到数组中,然后返回该数组Javascript 要在node.js中同步发送请求吗,javascript,arrays,node.js,mongoose,sync,Javascript,Arrays,Node.js,Mongoose,Sync,我有一个场景,我想从集合中获取数据并插入到数组中,然后返回该数组 router.route('/user/:_id/host/:_id/joineeList').get(function(req, res) { var finalList = []; Host.findOne({ _id : req.params._id, }, function(err, host) { if (err) { res.send(er
router.route('/user/:_id/host/:_id/joineeList').get(function(req, res) {
var finalList = [];
Host.findOne({
_id : req.params._id,
}, function(err, host) {
if (err) {
res.send(err);
} else {
var count = host.joinees.length;
for (var i = 0; i < count; i++) {
console.log(host.joinees[i].userid);
var ID = host.joinees[i].userid;
var CODE = host.joinees[i].status_code;
User.findOne({
_id : host.joinees[i].userid
}, function(err1, user) {
if (err1) {
console.log(err1);
} else {
finalList.push({
"userId" : ID,
"name" : user.name,
"profilepic" : user.profilepic,
"status" : CODE
});
console.log(finalList);
// finalList[i].add = ("userId",ID);
// finalList[i].add = ("name",user.name);
// finalList[i].add = ("profilepic",user.profilepic);
// finalList[i].add = ("status",CODE);
}
});
}
}
});
});
您可能需要异步库(或映射)的并行方法,请查看它您可以使用此库-。方法是
eachSeries
您的代码如下所示:
var async = require('async');
router.route('/user/:_id/host/:_id/joineeList').get(function (req, res) {
var finalList = [];
Host.findOne({
_id: req.params._id
}, function (err, host) {
if (err) {
res.send(err);
} else {
var count = host.joinees.length;
var limits = [];
for (var i = 0; i < count; i++) {
limits.push(i);
}
async.eachSeries(limits, function (i, callback) {
console.log(host.joinees[i].userid);
var ID = host.joinees[i].userid;
var CODE = host.joinees[i].status_code;
User.findOne({
_id: host.joinees[i].userid
}, function (err1, user) {
if (err1) {
console.log(err1);
} else {
finalList.push({
"userId": ID,
"name": user.name,
"profilepic": user.profilepic,
"status": CODE
});
callback();
}
});
}, function() {
console.log(finalList);
});
}
});
});
var async=require('async');
router.route('/user/:_id/host/:_id/joineeList').get(函数(req,res){
var finalList=[];
主持人:芬顿({
_id:请求参数\u id
},函数(错误,主机){
如果(错误){
res.send(err);
}否则{
var count=host.joinees.length;
风险价值限额=[];
对于(变量i=0;i
感谢@Vitaliy Zurian,让我知道它是否有用。通过在for循环中使用计数器,我使用了以下代码
router.route('/user/:_id/host/:_id/joineeList').get(function (req, res) {
var finalList = [];
Host.findOne({
_id: req.params._id
}, function (err, host) {
if (err) {
res.send(err);
} else {
var count = host.joinees.length;
var limits = [];
for (var i = 0; i < count; i++) {
limits.push(i);
}
async.eachSeries(limits, function (i, callback) {
console.log(host.joinees[i].userid);
var ID = host.joinees[i].userid;
var CODE = host.joinees[i].status_code;
User.findOne({
_id: host.joinees[i].userid
}, function (err1, user) {
if (err1) {
console.log(err1);
} else {
finalList.push({
"userId": ID,
"name": user.name,
"profilepic": user.profilepic,
"status": CODE
});
callback();
}
});
}, function() {
console.log(finalList);
});
}
});
});
router.route('/user/:_id/host/:_id/joineeList').get(函数(req,res){
var finalList=[];
主持人:芬顿({
_id:请求参数\u id
},函数(错误,主机){
如果(错误){
res.send(err);
}否则{
var count=host.joinees.length;
风险价值限额=[];
对于(变量i=0;i
您不能在节点中同步执行操作。为什么要同步执行并阻止所有操作?使用承诺或回调使其成为可能,以便在您启动的所有异步任务完成时进行应答。感谢您的帮助!当我尝试使用你的代码时,它显示了一个错误。错误为“ReferenceError:startAt未定义”@KanishkaSen-Oops。它应该是i
,而不是startAt
。我已经更新了我的答案-现在试试我还有一个疑问。你能看一下吗。以下是链接:-
router.route('/user/:_id/host/:_id/joineeList').get(function (req, res) {
var finalList = [];
Host.findOne({
_id: req.params._id
}, function (err, host) {
if (err) {
res.send(err);
} else {
var count = host.joinees.length;
var limits = [];
for (var i = 0; i < count; i++) {
limits.push(i);
}
async.eachSeries(limits, function (i, callback) {
console.log(host.joinees[i].userid);
var ID = host.joinees[i].userid;
var CODE = host.joinees[i].status_code;
User.findOne({
_id: host.joinees[i].userid
}, function (err1, user) {
if (err1) {
console.log(err1);
} else {
finalList.push({
"userId": ID,
"name": user.name,
"profilepic": user.profilepic,
"status": CODE
});
callback();
}
});
}, function() {
console.log(finalList);
});
}
});
});