Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript http请求每500毫秒一次,直到请求完成_Javascript_Angularjs_Http_Settimeout - Fatal编程技术网

Javascript http请求每500毫秒一次,直到请求完成

Javascript http请求每500毫秒一次,直到请求完成,javascript,angularjs,http,settimeout,Javascript,Angularjs,Http,Settimeout,我正在寻求每隔500毫秒不断请求服务器。 我想先申请,如果500毫秒后申请仍未完成,我想再次申请。然后再次等待500毫秒,检查是否不完整。我想重复这个过程,直到请求完成 现在,我的请求如下所示: $http({ method: method, url:baseUrl, headers: { 'Content-Type' : 'application/json; charset=utf-8', 'Data-Type': 'json'

我正在寻求每隔500毫秒不断请求服务器。 我想先申请,如果500毫秒后申请仍未完成,我想再次申请。然后再次等待500毫秒,检查是否不完整。我想重复这个过程,直到请求完成

现在,我的请求如下所示:

$http({
      method: method,
      url:baseUrl,
      headers: {
       'Content-Type' : 'application/json; charset=utf-8',
       'Data-Type': 'json'
       },
       data: resultService.sendData(true),
      cache:false
    })
    .success(function(data,status,headers,config){  // accepts more parameters
      $timeout(function(){
        resultService.activeSearch=false;
        $timeout(function(){
          request= $filter('orderBy')(data,['price','id']);
        },0);
      },1000);

    })
    .error(function(){ 
      resultService.activeSearch=false;
      function(){
        request={error:1};
      };
    });

  };
我想用这样的东西

(function tick(){
  $http({
    method: method,
    url:baseUrl,
    headers: {
      'Content-Type' : 'application/json; charset=utf-8',
      'Data-Type': 'json'
    },
    data: resultService.sendData(true),
    cache:false
  })
    .success(function(data,status,headers,config){  // accepts more parameters
      request=data;
      $timeout(tick,500);
      $timeout(
        function(){resultService.activeSearch=false;
      },1000);

    })
     .error(function(){ 
         $timeout(tick,500);
          resultService.activeSearch=false;
          function(){
            request={error:1};
          };
        });
})();

这不符合预期。我哪里错了?

使用$http的超时参数

函数MyCtrl($scope,$http){
$scope.logs=''
//将尝试每隔500毫秒获取targetUrl,然后使用数据调用successCallback
函数tryToGet(targetUrl,successCallback){
$scope.logs+='\n新尝试\n';
//使用timeout参数尝试get
var trunt=$http.get(targetUrl,{timeout:500})
//出现错误时,请重试
尝试。错误(函数(){
tryToGet(targetUrl,successCallback);
});
//成功后,执行回调
尝试成功(successCallback);
}
功能whenOk(数据){
$scope.logs+=数据
}
tryToGet('http://google.com",whenOk)
}


此代码的行为是什么?500毫秒后似乎根本没有发出新的请求。是不是因为我在500毫秒后没有获得错误,因此没有提出新的请求?在我看来,在进入之前,我必须在其他地方启动勾号功能。成功吗?还有一个$interval服务,看起来不错。我现在将设置后端,看看它是否能像我希望的那样运行。但是测试效果很好。谷歌页面没有超时,我没有找到一个页面无法回答。如果页面关闭(404错误),它将以最高速度链接请求,因此可能需要在重试之前添加一个超时。是否必须精确为500毫秒,或者超时错误可以精确为1000毫秒,其他错误可以精确为500毫秒?