2014-09-24 57 views
2

内部方法我不能找出如何调用该方法.checkProgress()内此美元区间范围这个工厂内:

app.factory('Poller', function ($http, $q, $interval) { 
    var poll=this; 
    poll.timer=null; 
    return{ 
     checkProgress: function (url, user_uuid) { 
      var deferred = $q.defer(); 
      $http({method: 'GET', url: '/api/v1/poll/profile/', json: true, 
        params: {url: url, user_uuid: user_uuid}} 
      ).success(function (data) { 
        deferred.resolve(data); 
       }).error(function() { 
        deferred.reject("Error checking poll"); 
       }); 
      return deferred.promise; 
     }, 
     start: function (url, user_uuid) { 
      poll.timer = $interval(_.bind(function() { 
       this.checkProgress(url,user_uuid).then(function (result) { ///// 

         console.log(result); 

       }, function (error) { 
        alert(error); 
       }); 

      }, poll), 1000); 
     }, 
     stop: function() { 
      $window.clearInterval(poll.timer); 
     } 
    }; 
}); 

线this.checkProgress(url,user_uuid)错误的。我试过this,.callpoll.,但无法弄清楚如何去做。

回答

3

您可以分配对象作为一个变量,而不是和声明都充当该变量的方法,因此,您避免使用绑定。

app.factory('Poller', function ($http, $q, $interval) { 
    var poll = {}; 
    poll.timer = null; 

    poll.checkProgress = function (url, user_uuid) { 
     var deferred = $q.defer(); 
     $http({method: 'GET', url: '/api/v1/poll/profile/', json: true, params: {url: url, user_uuid: user_uuid}}) 
     .success(function (data) { 
      deferred.resolve(data); 
     }).error(function() { 
      deferred.reject("Error checking poll"); 
     }); 

     return deferred.promise; 
    }; 

    poll.start = function (url, user_uuid) { 
     poll.timer = $interval(function() { 
     poll.checkProgress(url,user_uuid).then(function (result) { 
      console.log(result); 
     }, function (error) { 
      alert(error); 
     }); 
     }, 1000); 
    }; 

    poll.stop = function() { 
     $window.clearInterval(poll.timer); 
    }; 

    return poll; 
}); 
+0

真棒,这工作。谢谢。现在明显地显示给我。 :) – metalaureate 2014-09-24 17:43:47

0

你应该$区间回调绑定到this对象,而不是poll

start: function (url, user_uuid) { 
    poll.timer = $interval(_.bind(function() { 
     this.checkProgress(url,user_uuid).then(function (result) { ///// 

       console.log(result); 

     }, function (error) { 
      alert(error); 
     }); 

    }, this), 1000); 
}, 
+0

不幸的是,同样的问题 – metalaureate 2014-09-24 17:43:19