簡體   English   中英

使用node.js在服務器上運行循環

[英]Run loop on the server with node.js

假設我需要不斷地從許多客戶端收集一些數據,並並行運行一些復雜的循環,用這些數據來解決一些問題。 我該怎么做? 我應該在我的代碼段中寫這個嗎:

app.get('/', function(req, res) {
    res.sendFile(__dirname + '/public/views/index0.html');
});

io.sockets.on('connection', function(socket) {
    // SOME STUFF WITH THE SOCKET
    socket.on('disconnect', function(data) {
       //SOME OTHER STUFF
    });

});

while(...) {
    //THE LOOP STUFF
}

或者我需要使用setTimeout()和setInterval()函數? 我該如何在與回調的內容並行運行的服務器上執行循環?

暫時不要使用它,它會阻塞線程。 setTimeout()將僅運行一次。 您需要使用setInterval()函數。

您可以使用async模塊通過回調處理異步操作,也可以使用promise避免回調。

在這里,我如何為每個操作處理一個復雜的異步操作,這可能有助於您獲得想法,從而實現ayncs forach

var cond = { _schedule: schedule_id }; // find curse by schedule id
Course.find(cond, function (err, courses) {
    if (err) {
        callback({ "success": false, "message": "Not able to update" });
    } else {

        async.forEachLimit(courses, 1, function (course, coursesCallback) {
            async.waterfall([
                function (callback) {
                    var schedule_date = moment(change_data.date).format('YYYY-MM-DD') + "T00:00:00.000Z"
                    var Assignmentcond = {
                        assignment_schedule_order: {
                            $gte: schedule_date
                        },
                        _course: course._id,
                        _schedule: schedule_id,
                        _user: userid
                    };

                    Assignment.find(Assignmentcond)
                        .populate({
                            path: '_course',

                        })
                        .lean()
                        .sort({ assignment_schedule_order: 1 })
                        .exec(function (err, AssignmentList) {
                            if (err) {
                                callback(null, '');
                            } else {
                                //console.log("------------------AssignmentList---------------------------");
                                //console.log(AssignmentList);

                                async.forEachLimit(AssignmentList, 1, function (ThisAssignmentCell, ThisAssignmentCellCallback) {

                                    async.waterfall([
                                        function (callback) {
                                            var SearchObj = items;
                                            var lebelObject = {};

                                            for (var i = 0, flag = 0, insert = 0; i < SearchObj.length; i++) {

                                                if (SearchObj[i].date == ThisAssignmentCell.assignment_schedule_date) {
                                                    flag = 1;
                                                }
                                                if (flag == 1 && SearchObj[i].label != "") {
                                                    if (ThisAssignmentCell.day == SearchObj[i].day_index) {
                                                        insert = 1;
                                                        var lebelObject = SearchObj[i];
                                                        break;

                                                    }

                                                }

                                            }




                                            callback(null, ThisAssignmentCell, lebelObject, insert);
                                        },
                                        function (ThisAssignmentCell, SearchObj, insert, callback) {
                                            console.log('----------------------');
                                            console.log('ThisAssignmentCell', ThisAssignmentCell);
                                            console.log('SearchObj', SearchObj);
                                            console.log('----------------------');

                                            if (insert > 0) {

                                                var query = { _id: ThisAssignmentCell._id },
                                                    fields = {
                                                        assignment_date: moment(SearchObj.date).format('MM/DD/YYYY'),
                                                        assignment_schedule_date: moment(SearchObj.date).format('YYYY-MM-DD'),
                                                        assignment_schedule_order: new Date(SearchObj.date),
                                                        day: SearchObj.day_index,
                                                        dayNum: SearchObj.weekday_num
                                                    },
                                                    options = { upsert: false };

                                                Assignment.update(query, fields, options, function (err, affected) {
                                                    callback(null, '');
                                                });


                                            } else {
                                                //                                                                                                    var cond = { _id: ThisAssignmentCell._id};
                                                //                                                                                                    Assignment.remove(cond)
                                                //                                                                                                          .exec(function (err, cnt) {
                                                //                                                                                                             callback(null, '');
                                                //                                                                                                    }); 

                                            }



                                        }
                                    ], function (err, result) {
                                        // result now equals 'done'
                                        console.log('done')
                                        ThisAssignmentCellCallback();
                                    });


                                }, function (err) {
                                    console.log("Assignment For Loop Completed");
                                    callback(null, AssignmentList);
                                });



                            }
                        });



                }
            ], function (err, result) {
                // result now equals 'done'
                console.log('done')
                coursesCallback();
            });
        }, function (err) {
            console.log("courses For Loop Completed");
        });

    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM