Node.js NodeJ使用回调来等待foreach的结束
我正在学习nodeJS,并编写了以下简单代码:Node.js NodeJ使用回调来等待foreach的结束,node.js,asynchronous,callback,Node.js,Asynchronous,Callback,我正在学习nodeJS,并编写了以下简单代码: user_logged.forEach(function (element) { db.collection("users").find({username: element.username}).toArray(function (err, users) { if (((new Date() - users[0].lastAction) / 1000) >= 60) {
user_logged.forEach(function (element) {
db.collection("users").find({username: element.username}).toArray(function (err, users) {
if (((new Date() - users[0].lastAction) / 1000) >= 60) {
//Expired session without logout
/* Delete user and gain access to the incoming */
db.collection("user_logged").deleteOne({username: element.username});
req.session.logged = true;
req.session.username = req.body.username;
req.session.type = documents[0].type;
// var search = {username: req.session.username};
// var newvalue = {$set: {lastAction: new Date()}};
// db.collection("users").updateOne(search, newvalue, function (err, curs2) {
// if (err) throw err;
// });
console.log(req.session.username);
res.end({url: "http://localhost:3000/commerce"});
}else{
console.log("time passed: " + (new Date() - users[0].lastAction) / 1000);
}
});
});
console.log("after end of cycle ");
res.json({ error: 'tooManyUsers' });
在执行res.json({error:'tooManyUsers')之前,我想等待foreach
的结束代码>
在这种情况下如何使用回调?您可能可以使用async/await执行您想要的操作,您将路由声明为异步路由,并等待用户\u登录。forEach…
部分
//make your route async
app.get('/api/test', async (req, res) => {
let url = await getUrl(element);
console.log("after end of cycle ");
if (url != "") {
res.end({
url: "http://localhost:3000/commerce"
});
}
res.json({
error: 'tooManyUsers'
});
});
const getUrl = (element) => {
user_logged.forEach(function(element) {
db.collection("users").find({
username: element.username
}).toArray(function(err, users) {
if (((new Date() - users[0].lastAction) / 1000) >= 60) {
//Expired session without logout
/* Delete user and gain access to the incoming */
db.collection("user_logged").deleteOne({
username: element.username
});
req.session.logged = true;
req.session.username = req.body.username;
req.session.type = documents[0].type;
// var search = {username: req.session.username};
// var newvalue = {$set: {lastAction: new Date()}};
// db.collection("users").updateOne(search, newvalue, function (err, curs2) {
// if (err) throw err;
// });
console.log(req.session.username);
return "http://localhost:3000/commerce";
} else {
console.log("time passed: " + (new Date() - users[0].lastAction) / 1000);
return "";
}
});
});
}