2017-07-29 6 views
1

Die Sache ist, ich Zufallszahl auf eine Variable hinzufügen möchten, die anfänglich 0 ist, die nach einer zufälligen Timeout passieren muss, bis die Variable 100.hinzufügen Zufallszahl in zufälligen Zeitabständen

$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 immer erreicht bleibt 0, daher geht es in eine Endlosschleife;

+4

So? Was ist dein Problem? – Kamesh

+0

bearbeitet die Frage gerade jetzt – chows2603

Antwort

3

Sie inifinity Schleife seit $timeout Funktion erhalten, die Sie verwenden, ist async, aber Ihre Schleife ist sync . Sie haben Rekursion zu verwenden:

$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/

+0

perfekt! Danke vielmals :) – chows2603

-2

Math.random ist eine JS-Funktion, so hat es Math.floor(Math.random() * 100 +1); anstatt zu sein von Math.floor(Math.random * 100 +1);

ich nicht den Rest des Codes überprüft haben.


Sie starten eine neue Schleife bei jeder Schleifeniteration. Ich bin nicht sicher über die korrekte Syntax AngularJS da ich Angular2 bevorzugen, aber so etwas wie dies funktionieren sollte ...

$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(); 
+0

bearbeitet meine Frage – chows2603