Nik*_*sel 2 javascript node.js express axios
我正在尝试从我的 nodejs 脚本中调用 rest API。我希望脚本不断重复调用这个 api,直到我得到一个肯定的结果。这是我想要做的,但我的脚本只是冻结了:
var success=0;
while(!success){
axios.post('http://localhost:2000/evaluate', {serviceName:"s1"})
.then((response)=>{
if(response.data==1){
success=1; //desired response, quit the loop
res.send('1')
}
else{ //not the desired response, keep trying
res.send('0')
}
}//end while loop
Run Code Online (Sandbox Code Playgroud)
基本上,如何进行重复的 API 调用,直到得到我想要的响应??
谢谢!
替换success为重试计数器并在必要时从回调中再次调用该函数。如果出现任何问题,还要保留一个计数器,以免陷入无限循环。
// your callback gets executed automatically once the data is received
var callback = (data, error) => {
// consume data
if (error) {
console.error(error);
return;
}
console.log(data);
};
// run the request. this function will call itself max. 5 times if the request fails
request(5, callback);
function request(var retries, var callback) {
axios.post('http://localhost:2000/evaluate', {
serviceName:"s1"
}).then(response => {
// request successful
if(response.data['done'] == 1) {
// server done, deliver data to script to consume
callback(response);
}
else {
// server not done yet
// retry, if any retries left
if (retries > 0) {
request(--retries, callback);
}
else {
// no retries left, calling callback with error
callback([], "out of retries");
}
}
}).catch(error => {
// ajax error occurred
// would be better to not retry on 404, 500 and other unrecoverable HTTP errors
// retry, if any retries left
if (retries > 0) {
request(--retries, callback);
}
else {
// no retries left, calling callback with error
callback([], error);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5692 次 |
| 最近记录: |