问题是我想将随机数添加到最初为0的变量,该变量必须在随机超时之后发生,直到变量达到100。
$scope.var1 = 0;
do{
$timeout(function(){
$scope.var1 += Math.floor(Math.random() * 100 +1);
},Math.floor(Math.random() * 100 +1));
console.log($scope.var1);
}while($scope.var1<100)
$scope.var1
始终保持为0,因此它会进入无限循环;
答案 0 :(得分:3)
你得到的无限循环因为你使用的$timeout
函数是异步的,但你的循环是同步的。你必须使用递归:
$scope.var1 = 0;
function recursiveTimeout(){
$timeout(function(){
if($scope.var1 < 100){
$scope.var1 += Math.floor(Math.random() * 10 + 1);
console.log($scope.var1);
recursiveTimeout()
}
}, Math.floor(Math.random() * 1000 + 1));
}
recursiveTimeout()
答案 1 :(得分:-2)
Math.random
是一个JS函数,因此它必须是Math.floor(Math.random() * 100 +1);
而不是Math.floor(Math.random * 100 +1);
我没有检查你的其余代码。
您在每次循环迭代时开始一个新循环。我不确定正确的AngularJS语法,因为我更喜欢Angular2,但这样的东西应该有效......
$scope.var1 = 0;
var repeatFunc = function repeatFunc() {
var num = Math.floor(Math.random() * 100 +1);
$scope.var1 += num;
console.log("num: ", num);
if ($scope.var1 < 100)
$timeout(repeatFunc, num);
}
repeatFunc();