вложенные циклы ожидания асинхронного повторения повторяющихся записей - PullRequest
0 голосов
/ 18 июня 2019

Я использую вложенные циклы в API. Один цикл прост для цикла, а другой - для асинхронного ожидания. Цикл Foreach при выполнении выдает повторяющиеся записи.

Я использую простую функцию для цикла итерации, ноостанавливает итерацию массива.

var loop_array = ["2019-06-13", "2019-06-14", "2019-06-15", "2019-06-16", "2019-06-17"]    
try {
        var users = await User.find({ 'roles': "employee" });
        await forEach(users, async user_data => {
            employee_result = [];
            //await loopArray(loop_array, user_data._id);
            for (let element of loop_array) {
                   let date2 = moment(element).add(1, 'days').format("YYYY-MM-DD");
                    let employee_attendance = await Attendance.findOne({
                        $and: [
                            { "actual_checkin": { $gte: element } },
                            { "actual_checkin": { $lt: date2 } },
                            { "employee": user_data._id }
                        ]
                    });
                    var data = {
                        dates: element,
                        employee_attendance: employee_attendance
                    }
                    employee_result.push(data);
           }
            var employee_data = {
                "employee": user_data.name,
                "employee_data": employee_result
            };
            employee_result2.push(employee_data);
        });
    } catch (e) {
        console.log(e);
    }

этот код повторяет повторяющиеся записи

for (let element of loop_array) {
                   let date2 = moment(element).add(1, 'days').format("YYYY-MM-DD");
                    let employee_attendance = await Attendance.findOne({
                        $and: [
                            { "actual_checkin": { $gte: element } },
                            { "actual_checkin": { $lt: date2 } },
                            { "employee": user_data._id }
                        ]
                    });
                    var data = {
                        dates: element,
                        employee_attendance: employee_attendance
                    }
                    employee_result.push(data);
           }

ответ Json повторяющихся итераций

{
    "employee_payroll": [
        {
            "employee": "Test Password",
            "employee_data": [
                {
                    "dates": "2019-06-13",
                    "employee_attendance": {
                        "status": 0,
                        "_id": "5d01dd5ea241427c0a43f273",
                        "employee": "5d00ad8592ab136ee97d5252",
                        "booking": "5d00aec092ab136ee97d5261",
                        "schedule_id": "5d00aea492ab136ee97d525f",
                        "minor_checkin_checkout": [],
                        "main_radius_checkin": "2019-06-13T05:20:43.884Z",
                        "main_radius_checkout": "2019-06-13T05:21:33.328Z",
                        "actual_checkin": "2019-06-13T05:20:58.794Z",
                        "actual_checkout": "2019-06-13T05:21:33.328Z",
                        "__v": 0
                    }
                },
                {
                    "dates": "2019-06-13",
                    "employee_attendance": null
                },
                {
                    "dates": "2019-06-13",
                    "employee_attendance": null
                },
                {
                    "dates": "2019-06-14",
                    "employee_attendance": null
                },
                {
                    "dates": "2019-06-13",
                    "employee_attendance": null
                },
]
}

ожидаемый ответ JSON

{
    "employee_payroll": [
        {
            "employee": "Test Password",
            "employee_data": [
                {
                    "dates": "2019-06-13",
                    "employee_attendance": {
                        "status": 0,
                        "_id": "5d01dd5ea241427c0a43f273",
                        "employee": "5d00ad8592ab136ee97d5252",
                        "booking": "5d00aec092ab136ee97d5261",
                        "schedule_id": "5d00aea492ab136ee97d525f",
                        "minor_checkin_checkout": [],
                        "main_radius_checkin": "2019-06-13T05:20:43.884Z",
                        "main_radius_checkout": "2019-06-13T05:21:33.328Z",
                        "actual_checkin": "2019-06-13T05:20:58.794Z",
                        "actual_checkout": "2019-06-13T05:21:33.328Z",
                        "__v": 0
                    }
                },
                {
                    "dates": "2019-06-14",
                    "employee_attendance": null
                },
                {
                    "dates": "2019-06-15",
                    "employee_attendance": null
                },
                {
                    "dates": "2019-06-16",
                    "employee_attendance": null
                },
                {
                    "dates": "2019-06-17",
                    "employee_attendance": null
                },
]
}
...