NodeJS использует функцию обратного вызова для ожидания конца foreach - PullRequest
0 голосов
/ 25 октября 2019

Я изучаю 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' });

Я хотел бы дождаться конца foreach, прежде чем делать res.json({ error: 'tooManyUsers' });

Как можноЯ использую обратный вызов в этой ситуации?

1 Ответ

0 голосов
/ 25 октября 2019
    //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 "";
            }
        });
    });
}
...