我的任务是从1到100生成3个随机数。每个数字都需要在2-5秒内生成。如何同时显示3个随机数和时间间隔
生成后,每个数字(连同其生成的秒数)都应该出现在屏幕上。所以,一个接一个(并非全部同时)数字应该出现在屏幕上。
我设法得到屏幕上的三个随机数字,但我无法获得屏幕上显示的秒数以及相应的数字。
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
</head>
<body ng-app="Lotery">
<div class="container" ng-controller="MainController">
<div class="row">
<div class="col-lg-12">
<h1>Three random numbers from {{ bottomNumber }} to {{ topNumber }}<small> (each in {{ minSeconds }} - {{ maxSeconds }} seconds)</small></h1>
<button class="btn btn-default" ng-click="firePromise()">Click to get the numbers</button>
<span ng-repeat="nr in resultNumbers track by $index">
<h1>{{ nr }} </h1>
</span>
</div>
</div>
</div>
</body>
</html>
angular.module('Lotery',[]);
angular.module('Lotery').controller('MainController', function($scope, $q) {
$scope.topNumber = 100;
$scope.bottomNumber = 1;
$scope.maxSeconds = 5;
$scope.minSeconds = 2;
function getNumber(){
var deferred = $q.defer();
setTimeout(function(){
$scope.randomNumber = Math.floor(Math.random() * ($scope.topNumber - $scope.bottomNumber + 1)) + $scope.bottomNumber;
$scope.seconds = 1000 * Math.floor(Math.random() * ($scope.maxSeconds - $scope.minSeconds + 1)) + $scope.minSeconds;
if(angular.isNumber($scope.randomNumber)){
deferred.resolve($scope.randomNumber);
} else {
deffered.reject('Error');
}
}, $scope.seconds);
return deferred.promise;
};
$scope.firePromise = function(){
$scope.resultNumbers = [];
var promise = getNumber();
promise.then(function(success){
$scope.resultNumbers.push(success);
return getNumber();
}).then(function(success){
$scope.resultNumbers.push(success);
return getNumber();
}).then(function(success){
$scope.resultNumbers.push(success);
});
};
});
见我的笔:http://codepen.io/M4i4/pen/EjyMdY
偏题:“Lottery” – isherwood