如果服务不可用,gapi.client应该优雅地失败吗?

时间:2014-06-19 01:00:32

标签: javascript angularjs google-api google-cloud-endpoints

如果服务因任何原因不可用,gapi.client是否应该正常失败?

我正在使用Google Endpoints和使用AngularJS的Javascript客户端进行一些测试。

以下代码将Endpoint库注入Angular:

<script>
    function apiCallback() {
      console.log('test');
      var apisToLoad = 1; // must match number of calls to gapi.client.load()
      var gCallback = function () {
        if (--apisToLoad == 0) {
          //Manual bootstraping of the application
          var $injector = angular.bootstrap(document, ['anatelFront']);
        }
      };
      gapi.client.load('anatel', 'v1', gCallback, '//localhost:8080/_ah/api');
    }
</script>
<script src="https://apis.google.com/js/client.js?onload=apiCallback"></script>


主控制器编码如下:

anatelFront.controller('MainCtrl', ['$scope',
  function ($scope) {

    $scope.filter = 0;
    try {
      gapi.client.anatel.directors.listDirectors({'filter':
        $scope.filter}).execute(function(resp){
        if (resp.queryResult){
          $scope.directors = angular.fromJson(resp.queryResult);
          console.log($scope.directors);
        }

      });
    }
    catch (e) {
      console.log(e);
    }
}]);

我在本地运行GAE(Linux上的Python),当我关闭开发服务器进程时,Angular Controller中断并且浏览器返回运行时错误,因此破坏了Angular控制器的渲染。 Angular是最新版本。


浏览器控制台显示的错误:

GET http://localhost:8080/_ah/api/static/proxy.html?jsh=m%3Y1Mqg net::ERR_CONNECTION_REFUSED
    zk 
    c 
    (anonymous function) 
    f



gapi.client应该优雅地失败吗?

我做错了什么或者没有做我应该做的事情,比如在执行gapi.client之前检查服务是否可用?



谢谢,
萨姆

1 个答案:

答案 0 :(得分:2)

据我所知,

gapi.client.load()不提供错误回调。 $ timeout调用可能是处理此问题的最佳方法。在调用gapi.client.load()之前,设置一个$ timeout,输出一个错误,比如5或10秒(无论你认为合理)。如果gapi.client.load()成功,则清除$ timeout,因此不输出错误。

相关问题