5
我正在使用request-promise
模塊來檢查網站是否正在使用代理。我試圖找到代理速度足以在5秒內回答。因此,如果請求在5秒內沒有超時,我只會添加對象。Promise即使解決了,也會掛起
對於某些代理,即使承諾解決,節點腳本暫停一段時間。我找不到延遲的原因。我看到它打印Done
但它掛起。 1分10秒後,腳本退出。這是由於我的代碼掛起,或開放套接字等操作系統問題?
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);
});
我收到'完成! '在控制檯上。這意味着所有的承諾都得到解決。即使'Promise.race()'它仍然掛起一段時間然後腳本退出 – Meanteacher
@Meanteacher我更新我的答案似乎是請求模塊錯誤,在超時https://github.com/request/request/issues/1676他們不關閉連接。 –
我檢查了鏈接到另一個問題的鏈接。但是,該用戶表示這是他的代碼中的錯誤。我仍然不明白原因。不管怎麼說,還是要謝謝你。 – Meanteacher