angularjs promise/timeout: 条件超时
angularjs promise/timeout: Conditional timeout
那么有没有可能只有$scope.counter
达到5后才能达到.then()
?
这里是JSFiddle
使用 Promise
以某种方式破坏了我的观察器 - 它仅在 window 调整大小时适用。所以我想知道如果没有 Promises
我是否可以做到
<div ng-app="myApp">
<div ng-controller="myController">
<div>some{{message}}</div>
<div>counter: {{counter}} sec</div>
</div>
</div>
(function(){
var myApp = angular.module('myApp', []);
myApp.controller('myController', function($scope, $timeout){
//time
$scope.counter = 0;
$scope.message = "";
//timer callback
var timer = function() {
$scope.counter++;
if ($scope.counter > 5) {
return;
}
$timeout(timer, 1000);
}
$timeout(timer, 2000).then(function() {
$scope.message="body once told the world was gonna roll me";
});
});
})();
$timeout
不会 return 任何类型的 Promise
然而,如果你真的想要让这项工作脱离承诺,你可以执行以下操作:
var defer = $q.defer();
var timer = function() {
$scope.counter++;
if ($scope.counter > 5) {
defer.resolve(true);
return;
}
$timeout(timer, 1000);
}
$timeout(timer, 2000);
defer.promise.then(function() {
$scope.message="body once told the world was gonna roll me";
});
笨蛋:https://jsfiddle.net/463srkyj/
在不了解您的代码的情况下,如果两个超时值可以相同,我建议您使用 $interval
而不是 $timeout
。还会问为什么不将消息设置在 if ($scope.counter > 5)
条件中。
那么有没有可能只有$scope.counter
达到5后才能达到.then()
?
这里是JSFiddle
使用 Promise
以某种方式破坏了我的观察器 - 它仅在 window 调整大小时适用。所以我想知道如果没有 Promises
<div ng-app="myApp">
<div ng-controller="myController">
<div>some{{message}}</div>
<div>counter: {{counter}} sec</div>
</div>
</div>
(function(){
var myApp = angular.module('myApp', []);
myApp.controller('myController', function($scope, $timeout){
//time
$scope.counter = 0;
$scope.message = "";
//timer callback
var timer = function() {
$scope.counter++;
if ($scope.counter > 5) {
return;
}
$timeout(timer, 1000);
}
$timeout(timer, 2000).then(function() {
$scope.message="body once told the world was gonna roll me";
});
});
})();
$timeout
不会 return 任何类型的 Promise
然而,如果你真的想要让这项工作脱离承诺,你可以执行以下操作:
var defer = $q.defer();
var timer = function() {
$scope.counter++;
if ($scope.counter > 5) {
defer.resolve(true);
return;
}
$timeout(timer, 1000);
}
$timeout(timer, 2000);
defer.promise.then(function() {
$scope.message="body once told the world was gonna roll me";
});
笨蛋:https://jsfiddle.net/463srkyj/
在不了解您的代码的情况下,如果两个超时值可以相同,我建议您使用 $interval
而不是 $timeout
。还会问为什么不将消息设置在 if ($scope.counter > 5)
条件中。