javascript - 循环调用api直到响应成功

标签 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

基本上,我怎样才能重复调用 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);
        }
    });
}

关于javascript - 循环调用api直到响应成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515291/

相关文章:

javascript - koa.js 注册后返回 404 "Not Found",而不是来自 ctx.body 的 token

javascript - MongoDB 聚合框架 - 如何查询平均值

javascript - Node 静态 js 文件不刷新

node.js - 如何调试 Passport

javascript - 将多个图像捆绑在一起用于 HTTP?

javascript - 我需要帮助弄清楚为什么这个 'if' 语句不起作用

javascript - JavaScript 可以处理 C 结构吗?

javascript - Nodejs Twilio API 3.x - messages.delete(...) 不是函数

express - 在服务器端渲染模板有意义吗?

node.js - 如何使用 ejs 对 POST 和 PUT 请求使用相同的表单?