如何在发出下一个请求之前等待响应

How to wait for a response before making the next request?

本文关键字:等待 响应 请求 下一个      更新时间:2023-09-26

我正在编写一个服务器应用程序,该应用程序从API获取数据,检查是否有任何新内容,并向所有连接发出更新。唯一的限制是更新必须按照创建的顺序(按时间顺序或pk)发出,并且请求可能会受到前一个请求的响应的影响。

我面临的问题是,当一个请求花费很长时间时,另一个请求可能会超过它,并开始"不合时宜"地发出更新。

最好的方法是什么?理想情况下,我想要这样的流程:

request -> response -> emit ... request -> response -> emit ...

注意:如果请求失败或超时,我希望至少重试X次。

您可以使用回调

function check(){
     //request to the api
     http.get("http://www.google.com/index.html", function(res) {
          console.log("Got response: " + res.statusCode);
          // here you can emit your events
          // do your events
          // after done your events, you can call check again
          check()
     }).on('error', function(e) {
          console.log("Got error: " + e.message);
     });
}
check()

有两种快速方法可以解决这个问题。

  1. 你可以使用回调并递归使用你的函数

    var myCall = function(){
       var request = new XMLHttpRequest();
       request.open(<request_method>, <request_url>, true);
       request.send(null);
       if (request.status === 200) {
          //put your emit function here
          myCall();
       }
    }
    myCall();
    
  2. 您可以使呼叫同步。如果你连续拨打,我不建议这样做

    var myCall = function(){
       var request = new XMLHttpRequest();
       request.open(<request_method>, <request_url>, false); //false makes it synchronous
       request.send(null);
       if (request.status === 200) {
          //put your emit function here
       }
    }
    myCall();
    myCall();
    myCall();
    myCall();
    .
    .
    .
    as many times as u want