gpt4 book ai didi

javascript - 如何处理nodejs中同一get函数的多次调用?

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:35 25 4
gpt4 key购买 nike

使用 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 i'm getting the list of all the URL's并获取所有 URL 的长度或数量。

2)在推送主机功能中,我推送所有键值,即该 URL 的主机名。所以,在 keyArrLength has the total number of URLS and keyArr has the list of all the hostnames i.e keys .

3)然后我调用next()

4)在 next() 中,我对每个 url 进行请求调用并将数据存储为 form of object in an array allResponses[] .

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

6)我通过分配

调用直到最后一个 url
 index=0 in the beginning and incrementing in each loop

7)当我每 10 秒调用此函数时,它工作正常。

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

我是 Nodejs 新手。我不知道我做得是否正确,或者是否有更好的方法可以调用这些电话。

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

非常感谢您阅读本文!如果可能的话请帮忙!如果您知道更好的方法,请提出建议。提前致谢。

最佳答案

终于我发现了问题。上面的代码没问题。问题是我没有将 var 添加到这个 hostname = data._id; 中,因此它存储了以前的值。这就是问题所在。

关于javascript - 如何处理nodejs中同一get函数的多次调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com