我有一个问题,了解$ interval返回的承诺如何在Angular中起作用。
让我们说在下面的例子中,我们有一个简单的“api”工厂,它带有一个名为“getStuff”的方法,它返回一个带有一个项目的数组。我们还有一个控制器在该工厂调用$ timeout:
angular.module("app",[])
.factory('api', function(){
return {
getStuff: function() {
return ["stuff"];
}
};
})
.controller('appCtrl', function($scope, $timeout, api){
$timeout(api.getStuff, 1000)
.then(function(response){
console.log(response);
});
})
这将在1秒后在控制台中记录'[“stuff”]',这很棒。
所以我想说我想通过用$ interval替换$ timeout来每秒调用该方法。现在没有任何反应:
angular.module("app",[])
.factory('api', function(){
return {
getStuff: function() {
return ["stuff"];
}
};
})
.controller('appCtrl', function($scope, $interval, api){
$interval(api.getStuff, 1000)
.then(function(response){
console.log(response);
});
})
在这种情况下$ timeout和$ interval有什么不同?
我感谢所有人的帮助!
答案 0 :(得分:4)
$interval
返回的承诺唯一能做的就是取消它(停止执行):
var handle = $interval(someFunc, 1000);
...
$interval.cancel(handle);
您的代码应该如下所示:
app.controller('appCtrl', function($scope, $interval, api) {
$interval(function() {
console.log(api.getStuff());
}, 1000);
});
想要看到一切都在一起工作:
app.controller('appCtrl', function($scope, $interval, $timeout, api) {
var handle = $interval(function() {
console.log(api.getStuff());
}, 1000);
$timeout(function() {
$interval.cancel(handle);
}, 5000);
});