gpt4 book ai didi

javascript - 将多个 http.requests 中的数组组合成一个数组

转载 作者:行者123 更新时间:2023-12-02 22:47:26 25 4
gpt4 key购买 nike

我试图弄清楚为什么这个 https.requests 循环不起作用。

我试图每分钟发出 5 个 http 请求。每个 http GET 请求都会调用函数 processRequest() 作为回调,并且每个 processRequest() 从请求中返回一个数组,我们将其称为 resultsArray。我希望能够每分钟生成一个数组或对象,它是所有 5 个数组或对象的串联来自 5 个 http 请求的“resultsArray”,但我无法弄清楚如何在何处声明哪些变量。这是我尝试过的:

CronJob:

var CronJob = require('cron').CronJob;
var tripDataFinal= new Object();

function makeRequest (){
var urlCounter = 0 ;
var feedsList = ["urlA", "urlB", "urlC", "urlD", "urlE"];
feedsList.forEach((feedToCheck,i)=>{
options = {
host: 'host',
path: feedToCheck
}
https.request(options, function(response){
processRequest(response, i, urlCounter, resultsArrayAll);}).on('error', (e) => {
console.log("Error!"); console.error(e);}).end();
})

}
new CronJob('* * * * * *', makeRequest
, null, true, 'America/New_York');

在单独的 require() 文件中定义的函数 processRequest():

module.exports = {


processRequest : function(response, feedNumber, urlCounter, tripDataFinal) {
urlCounter++;
//do stuff to 'response' to produce a result called resultsArray
resultsArrayAll["array"+urlCounter] = resultsArray;
console.log(urlCounter);
if (urlCounter == 5){
urlCounter = 0 ;
return concat(resultsArrayAll.array0
, resultsArrayAll.array1
, resultsArrayAll.array2
, resultsArrayAll.array3
, resultsArrayAll.array4);
}
else return resultsArrayAll;

}}

问题是“urlCounter”(这是我计算我正在处理的 5 个请求中的哪个请求的方法)似乎没有超过 1。我做错了什么(可能是多件事)?

谢谢

最佳答案

您可以将 http.request 包装在 Promise 中,然后执行 Promise.all(),如下所示:

function makeRequest (){
var urlCounter = 0 ;
var feedsList = ["urlA", "urlB", "urlC", "urlD", "urlE"];
var requestPromises = feedsList.map(function(url){
return new Promise(function (resolve, reject){
options = {
host: 'host',
path: feedToCheck
}
https.request(options, function(response){
resolve(response);
}).on('error', (e) => {
reject(e);
}).end();
});
});

Promise.all(requestPromises)
.then(function(resultsArray){
console.log('Results:', resultsArray);
})
.catch(function(e) { console.error(e); });
}

因此,在 resultsArray 中,您将收到来自 5 个请求的 5 个响应(按照它们的发出顺序),您可以在这里对它们执行任何您想要的操作,例如将数组传递给 processRequest() 函数或其他东西。

关于javascript - 将多个 http.requests 中的数组组合成一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58335499/

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