Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs中处理同一get函数的多个调用?_Javascript_Node.js_Ajax - Fatal编程技术网

Javascript 如何在nodejs中处理同一get函数的多个调用?

Javascript 如何在nodejs中处理同一get函数的多个调用?,javascript,node.js,ajax,Javascript,Node.js,Ajax,使用Ajax调用,我每10秒调用一次下面的get函数,以便监视一些URL的状态 app.get('/getUrl', function(req, res) { var response = {}; var keyArr = []; var urlData = []; var responses = []; var dataArr = []; var ke

使用Ajax调用,我每10秒调用一次下面的get函数,以便监视一些URL的状态

app.get('/getUrl', function(req, res) {
            var response = {};
            var keyArr = [];
            var urlData = [];
            var responses = [];
            var dataArr = [];
            var keyArrLength;


            //Listing All the URLS

            db.list(function(err, data) {
                keyArrLength = data.rows.length;
                dataArr = data.rows;
                console.log("keyArrLength" + keyArrLength);
                pushHost();
            });

            //Getting the key ie HOSTNAMES

            function pushHost() {
                dataArr.forEach(function(arrayItem) {
                    var host = arrayItem.key;
                    keyArr.push(host);
                    console.log("Array of hosts" + keyArr);

                });

                next(0); //Calling the main function
            }

            var urlResults = [];
            var allResponses = [];

            // Getting the Hostname and URL

            function next(index) {
                if (index === keyArrLength) { // No items left
                    res.end(JSON.stringify(allResponses));
                    return;
                } else { //Getting one URL at a time
                    db.get(keyArr[index], function(err, data) {
                        currentUrl = data.url;
                        hostname = data._id;
                        var options = {
                            url: "https://" + currentUrl,
                            strictSSL: false,
                            method: 'GET'
                        };

                        //Requesting data for that one URL

                        request(options, function(error, response, body) {

                            if (!error && response.statusCode == 200) {
                                var response = {};
                                response.body = JSON.parse(body);
                                response.hostname = hostname;
                                allResponses.push(response); //Pushing the data to final result

                            } else if (error || response.statusCode != 200) {

                                var response = {};

                                //Appending error results when it enters error handler

                                response.body = {
                                    "servicesStatus": [{
                                        "name": "name1",
                                        "active": false
                                    }, {
                                        "name": "name2",
                                        "active": false
                                    }, {
                                        "name": "name3",
                                        "active": false
                                    }],
                                }
                                response.hostname = hostname;
                                allResponses.push(response); //pushing data
                            }

                            next(index + 1); //Calling recursively till the last URL
                        });

                    });

                };

            }

        });
1) 在
db.list中,我将获得所有URL的列表,并获得所有URL的长度或计数

2) 在push host函数中,我推送所有的keyvalues,这是该URL的主机名。因此,在
keyArrLength中有URL的总数,而keyArr有所有主机名的列表,即keys

3) 然后我调用
next()

4) 在next()中,我对每个url进行请求调用,并将数据作为对象的
形式存储在数组allResponses[]

5) 如果它进入错误处理程序,我将把结果附加到
allResponses[]

6) 我将通过分配直到最后一个url

 index=0 in the beginning and incrementing in each loop
7) 当我每10秒调用一次这个函数时,它工作得很好

8) 但是当我刷新页面时,这个
getUrl
将被调用,并且它已经在执行了,因为这个调用每10秒进行一次。所以它们都会碰撞,结果会重复

我对nodejs是新手。我不知道我是否做得很好,或者有没有更好的方法打这些电话

我想知道,即使我刷新页面任意次数,我希望这个函数按顺序执行。如果最近一次通话中断了前一次通话,我需要终止前一次通话并从最近一次通话开始


非常感谢你阅读这篇文章!如果可能的话,请帮忙!建议您是否知道更好的方法。提前感谢。

最后我发现了问题。上面的代码很好。问题是我没有将
var
添加到此
hostname=data并因此存储上一个值。这就是问题所在。

最终我发现了问题所在。上面的代码只是很好。问题是我没有将
var
添加到此
hostname=data并因此存储上一个值。这就是问题所在