Node.js NodeJ使用回调来等待foreach的结束

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) {

我正在学习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) {
                //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 "";
            }
        });
    });
}