节点 JS:请求循环,直到状态代码 200
Node JS: Request Loop Until Status Code 200
我目前有工作代码可以执行请求并检查它是否收到成功的状态代码 200。我想在此基础上发展并循环它,它将不断发送请求,直到状态代码为 200。我尝试使用 while 循环,但没有收到正确的结果。感谢您的帮助!
request('http://0.0.0.0:9200', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log('success');
do(something);
}
else {
console.log('fail');
}
});
会像这样:
let retry = (function() {
let count = 0;
return function(max, timeout, next) {
request('http://0.0.0.0:9200', function (error, response, body) {
if (error || response.statusCode !== 200) {
console.log('fail');
if (count++ < max) {
return setTimeout(function() {
retry(max, timeout, next);
}, timeout);
} else {
return next(new Error('max retries reached'));
}
}
console.log('success');
next(null, body);
});
}
})();
retry(20, 1000, function(err, body) {
do(something);
});
您可以设置最大重试次数和重试之间的超时。这样您就不会引入无限循环,并且不会将最终冲击传递到重载的请求目标^^
我想要一个更直观的答案,包括承诺。我在尝试/捕获下面的代码中构建了 miggs 答案之上,并带有承诺和公理。
基于递归函数的简单示例
const throwNumbers = (count = 0) => {
console.log(count);
if (count++ < 10) {
throwNumbers(count);
} else {
console.log('max reached');
};
};
您可以将其他任何东西放在 try 部分并在 catch 部分处理错误代码。您必须设置最大重试次数,在我的情况下为 10。
let getResponse = async(count = 0) => {
try {
const axiosResponse = await axios.get(someURL, {
params: {
parameter1: parameter1,
},
});
return axiosResponse;
} catch (error) {
if (error || error.status != 200) {
console.error('failed, retry');
if (count++ < 10) {
return getResponse(count);
} else {
throw new Error('max retries reached');
};
} else {
throw error;
};
};
};
您将使用以下方式调用该函数,并使用响应值处理正文或任何内容。
let response = await getResponse();
console.log('This is the response:', response);
没有超时,但对我有用。
相关文章:
- AngularJS$http重定向状态代码
- AJAX错误状态代码500内部服务器错误
- 如何将JavaScript自动POST的状态代码获取到另一个域
- Http状态代码工厂AngularJs
- 成功ajax:如果是200状态代码,则运行函数else另一个函数
- 运行函数ifsuccess($.ajax)有200个状态代码
- XMLHttpRequest 对象状态代码为 0
- URL中包含特殊字符的HTTP状态代码
- 如何使用scalajs-angular获取请求的http状态代码
- Internet Explorer:可以't访问IFrame内容,除非状态代码为200
- 如何侦听跨域映像请求上的任何301/302重定向状态代码
- 如果 angularjs 中的状态代码为 403,请注销
- 如何让反应路由器响应 404 状态代码
- HTTP 状态代码 - Backbone.js 和 Jquery
- 如何使用 iframe.src 下载文件时获取返回状态代码
- 预检响应具有无效的 HTTP 状态代码 405 - AngularJS + Spring MVC
- 使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息
- http 状态代码 NodeJS/ExpressJS 错误
- 执行服务呼叫时的状态代码 12004
- AngularJS:使用 ngResource 执行 GET 请求时的状态代码 0