我需要一些关于我写的代码的帮助.. 我的代码触发了三个异步请求并更新了我页面上的一些内容。 我希望每X秒触发一次这些请求。 我已经看过几个这样的问题,how to schedule ajax calls every N seconds?关于setTimeout或setInterval,但问题是我需要每隔x秒触发一次请求..而我唯一可以想到的是setInterval / settimeout不计算每个电话分开的时间,但只有一次.. 例如
如果我在00.00.01 xhr2 at 00.00.02和xhr3 at 00.00.03 xhr1
对于下一次呼叫,每次20秒后,最好的方法是什么?
xhr1 00.00.21 xhr2 00.00.22 xhr3 00.00.23
xhr1 00.00.41 xhr2 00.00.32 xhr3 00.00.33
我的当前代码也是以这种方式编写的,即在使用回调函数接收到之前的响应之后每个xhr被触发
function request(url, callback){
....
asychronous request
....
callback(responseText);
}
request(url1, function(){
some code
}
request(url2, function(){
some code
}
request(url3, function(){
some code
}
如果建议采用另一种方法进行三次通话,我想知道..
答案 0 :(得分:2)
由于这是一个错综复杂的场景,我建议你研究一下promises。这不是一个简单的概念,但它可以让您在链接需求和回调之间保持明确的关注点分离。
如果没有承诺,您需要在回调中包含下一个xhr调用。
Promise包含在JavaScript库中,如jQuery或Dojo。
更简单的方案是忘记链接请求:
function allRequests(){
request(url1, function(){some code});
// url2 one second later
setTimeout(function(){request(url2, function(){some code});},1000);
// url3 one more second later
setTimeout(function(){request(url3, function(){some code});},2000);
}
// run the 3 requests every 20 seconds
setInterval(allRequests(),20000);
答案 1 :(得分:1)
有些选择是:
完全同时执行所有三个请求。是否有理由不能同时完成所有三个请求?
setInterval( allRequests, 20000 );
function allRequests() {
requestOne();
requestTwo();
requestThree();
}
使用上一个请求的成功函数链接您的请求。
setTimeout( requestOne, 5000 );
function requestOne() {
// do request blah blah
setTimeout( requestTwo, 5000 );
}
function requestTwo() {
// do request blah blah
setTimeout( requestOne, 5000 ); // loops back to first request
}
或者在开始时以超时错开您的请求。
setInterval( requestOne, 20000 ); // set first interval to start now
setTimeout( function() {
setInterval( requestTwo, 20000 ); // set second interval to start one second from now
}, 1000 );
setTimeout( function() {
setInterval( requestThree, 20000 ); // set third interval to start two seconds from now
}, 2000 );