J'utilise le module request-promise
pour vérifier si le site fonctionne avec un proxy ou non. J'essaie de trouver les procurations qui sont assez rapides pour répondre en 5 secondes. Par conséquent, je n'ajoute de l'objet que si la requête ne dépasse pas le délai de 5 secondes.La promesse se bloque même si elle est résolue
Pour certains proxies, même si la promesse se résout, le script de noeud se bloque pendant un certain temps. Je ne peux pas trouver la raison de ce retard. Je vois qu'il imprime Done
mais il se bloque. Après 1 minute 10 secondes plus tard, le script se termine. Est-ce que c'est dû à mon code, ou au problème du système d'exploitation pour les sockets ouverts, etc?
const rp = require('request-promise');
const testProxies = [
{
"ipAddress": "80.241.219.83",
"port": 3128,
},
{
"ipAddress": "45.55.27.246",
"port": 80
},
{
"ipAddress": "144.217.197.71",
"port": 8080,
},
{
"ipAddress": "104.131.168.255",
"port": 80,
},
];
function CheckSites(sitesArray,site) {
let ps = [];
for (let i = 0; i < sitesArray.length; i++) {
let proxy = sitesArray[i];
let ops = {
method: 'GET',
resolveWithFullResponse: true,
proxy: 'http://' + proxy.ipAddress + ':' + proxy.port,
uri:site,
};
let resp = rp.get(ops);
ps.push(resp);
}
return Promise.all(ps.map(function (p) {
p.time = Date.now();
return p
.then(function (a) {
return {'header':a.headers,'time':Date.now() - p.time};
})
.timeout(5000)
.catch(function (e) {
return {};
})
}))
}
CheckSites(testProxies,'https://www.example.com').then(function (object) {
console.log('Done!');
console.log(object);
}).catch(function (err) {
console.log('Exception: ' + err);
});
Je reçois 'fait! 'sur la console. Cela signifie que toutes les promesses sont résolues. Même avec 'Promise.race()' il se bloque encore pendant un certain temps puis le script sort – Meanteacher
@Meanteacher J'ai mis à jour ma réponse semble être bug de module de demande, sur le délai d'attente https://github.com/request/request/issues/1676 ils ne ferment pas la connexion. –
J'ai vérifié votre lien qui lie à un autre problème. Cependant, cet utilisateur dit que c'était une erreur sur son code. Je ne peux toujours pas comprendre la raison. Merci quand même. – Meanteacher