【问题标题】:How to run an async function in js with timeouts (for rate limiting)如何在带有超时的js中运行异步函数(用于速率限制)
【发布时间】:2022-01-26 18:36:20
【问题描述】:

我正在设计一个系统,用户将通过 JS 与我的 RESTful API 进行交互,如果返回的答案是 true,则将用不同的 SVG 替换 ts html 元素。如果 API 调用返回 false,则 JS 应等待 5 秒,然后重试 API 调用。同样,如果 API 调用返回 true,SVG 将被更改,函数将停止调用 API。如果返回的 API 调用为 true,如何让函数“休眠”5 秒后再运行,并结束函数?

代码:

async function getTransaction(){
var lookup = $("meta[name='lookup']").attr("content");  
axios.get('http://127.0.0.1:5000/client_api/transaction_status/' + lookup) 
.then(function (response) {
    var tStat = response.data.transactionStatus;
    console
    if(tStat){
      document.getElementById("ts").innerHTML = 'drawing the new svg and replacing the old one'
      console.log('transaction_found')
    }
    else if(!tStat){
      console.log("transaction not found")
    }
    else{
      console.log("error")
    }
  });
  }console.log("hello"); while(true){setTimeout(getTransaction,5000);}

【问题讨论】:

    标签: javascript jquery asynchronous dom axios


    【解决方案1】:

    不要使用 sleep ,因为它会暂停您的程序以暂停。而是像这样使用 setTimeout 。这将创建一个事件监听器,如果 tStatfalse,它会在 5 秒后再次调用该函数。

    false 的情况下,该函数将设置一个超时,然后再次调用该函数。超时完成后,它会自行清除。重复此步骤,直到 api 请求最终解析为 true

    async function getTransaction() {
      var lookup = $("meta[name='lookup']").attr("content");
    
      axios.get('http://127.0.0.1:5000/client_api/transaction_status/' + lookup)
        .then(function(response) {
          var tStat = response.data.transactionStatus;
          console
          if (tStat) {
            document.getElementById("ts").innerHTML = 'drawing the new svg and replacing the old one'
            console.log('transaction_found')
          } else {
            console.log("transaction not found")
            setTimeout(getTransaction, 5000);
          }
        });
    }
    console.log("hello");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2014-09-21
      • 1970-01-01
      相关资源
      最近更新 更多