如何在发出下一个请求之前等待响应
How to wait for a response before making the next request?
我正在编写一个服务器应用程序,该应用程序从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()
有两种快速方法可以解决这个问题。
-
你可以使用回调并递归使用你的函数
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();
-
您可以使呼叫同步。如果你连续拨打,我不建议这样做
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
相关文章:
- 在单击事件时更新主干模型,并在更改位置之前等待响应
- 如何使用 Ajax 一次仅按顺序发布数组的 1 个值,并在继续之前等待响应
- 如何在 $.post jQuery 中等待响应
- 如何在 ajax 中调用函数到 php 函数并等待响应
- Ajax在返回值之前等待响应
- 为什么这个呼叫在继续之前没有等待响应
- 如何在最里面的循环等待响应时延迟嵌套迭代
- 如何使用async.series来等待响应
- Angularjs$http等待响应
- 当使用带有单个套接字的httpAgent时,它会在发送下一个请求之前等待响应吗?
- Node.js:服务器等待响应和超时
- Google Maps放置API——如何让代码等待响应
- iMacros可以单击按钮而不等待响应吗?
- AngularJS控制器等待响应(或设置回调)
- Chrome扩展运行时.Sendmessage等待响应
- Node.js (node-pg)或C (libpq) -执行PostgreSQL请求而不等待响应
- 在JavaScript中异步加载配置,如何最好等待响应
- 当我们进行ajax调用并等待响应并阻塞页面时显示一个旋转器
- 运行jQuery函数.Ajax等待响应的时间足够长
- js:将记录保存到Ember.数据,等待响应后再显示