node.js - 如果 nodejs 中的请求成功,我如何停止所有请求并发送成功消息?
问题描述
在下面的代码中,我正在循环执行多个代理 IP 地址协议的请求。如果一个协议失败,另一个可能会成功。但是如果一个协议成功了,我不希望请求其他代理协议发生。我想终止所有请求并发送成功消息。我怎样才能做到这一点?
var request = require('request');
var ProxyAgent = require('proxy-agent');
var protocols = ['http://', 'https://', 'socks://', 'socks5://',
'socks4://', 'pac+http://']
var proxy_list = []
function(req, res) {
var proxy_ip = '186.94.179.162:8080'
var web_address = `https://github.com/kyungw00k/node-ping-proxy`;
setProxyProtocol(proxy_ip);
for (var i = 0; i < proxy_list.length; i++) {
getSpeed(proxy_list[i], web_address);
}
function setProxyProtocol(proxy_ip) {
for (let protocol of protocols) {
proxy_list.push(protocol + proxy_ip)
}
}
function getSpeed(proxy_url, web_address) {
try {
var proxyUri = proxy_url;
var agent = new ProxyAgent(proxyUri)
var options = {
uri: web_address,
method: "GET",
agent: agent,
timeout: 10000,
followRedirect: true,
maxRedirects: 10,
time: true
}
request(options, onResponse);
} catch (error) {
counter++
if(counter<6){
console.log('Waiting others...')
}
else{
failed(error.code,counter)
}
}
}
function onResponse(error, response, body) {
counter++;
if (error) {
if(counter<6){
//other response not arrived
}
else{
failed(error.code,counter)
}
} else {
var speed = (response.elapsedTime);
success(speed, counter)
}
}
function success(speed, counter) {
res.json({
'success': true,
'speed': speed,
'protocol used': protocols[counter]
})
}
function failed(code) {
res.json({
'error': true,
'error-code': code,
'message': "Bad request"
})
}
}
解决方案
推荐阅读
- objective-c - NSURLConnection 总是 TRUE
- python - 自动化无根安卓智能手机
- javascript - 使用从 ajax 请求返回的数据更新输入“值”属性...传入 [object, Object]。- Django/Python
- c - atomic operator++ 和 atomic_fetch_add_explicit 的区别
- python - 如何在布尔变量上使用 .trace?
- swift - 如何更快地显示来自 Firebase 的数据?
- r - 如何让R函数返回多个参数值
- python-3.x - 从 PyQt4 迁移到 PyQt5
- css - 在 RMarkdown 文档中为 fontcolor 创建与输出无关的标记
- java - 我有一个使用 H.264 (MPEG-4) 压缩记录视频的代码,但我想使用 MJPEG