以随机时间间隔

时间:2017-07-29 12:56:17

标签: javascript angularjs random

问题是我想将随机数添加到最初为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,因此它会进入无限循环;

2 个答案:

答案 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()

http://jsfiddle.net/dwypcx1f/3/

答案 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();