AngularJS $资源 - 在X毫秒后调用回退URL

时间:2016-08-30 09:38:28

标签: javascript angularjs connection-timeout fallback

我希望我的前端应用程序能够在第一个应用程序关闭的情况下切换到另一个api

例如:我拨打https://api.example.com/users?name=bob - 然后我收到net::ERR_CONNECTION_TIMED_OUT(Chrome XHR回复),表示api没有响应。我现在希望我的前端改为https://api1.example.com/users?name=bob

我查看了AngularJS 1.5.7 $资源的文档,该资源声明​​它采用类型为timeout的操作参数{number}。但是,将其设置为例如500仍会在大约2分钟后抛出net::ERR_CONNECTION_TIMED_OUT

通缉流程:

  1. 询问https://api.example.com/users?name=bob
  2. 如果这个避风港在10秒内没有回答:
  3. 在我还有后端时继续询问apiX
  4. 伪代码:

    angular.forEach(fallback_urls, function(url) {
      $resource(url + '/users?name=bob', {}, {timeout: 10}).get()
    });
    

1 个答案:

答案 0 :(得分:1)

您已在$资源上声明了您的操作错误。

$resource(url + '/users?name=bob', {}, {
    'get': {
        method: 'GET',
        timeout: 10000
     }
});

您可能还想查看“可取消”选项。

var res = $resource(url + '/users?name=bob', {}, {
  'get': {
    method: 'GET',
    cancellable: true
  }
});

var response = res.get();
var timeoutPromise = $timeout(function(){
    response.$cancelRequest();
},10000);

response.$promise.then(function(){
    $timeout.cancel(timeoutPromise);
});

然后以某种方式循环遍历您声明的备份$ resource对象。如果呼叫结算,当然会中止超时!希望这能为你提供一些线索!