我正在学习如何使用angulars $interval
来构建一个每秒生成随机字符串的简单应用程序(在服务内部)并将其返回给控制器。但是,我无法得到数据。我可以在函数调用中调用它,但不能在控制器内的调用函数中调用它。我错过了什么?我读过here,但仍然不明白。
控制器:
angular.module("app").controller("authorC", function ($scope, WebService) {
$scope.generate = function () {
console.log("generating..");
WebService.generateRandom().then(function (y) {
console.log(y);
});
};
$scope.stop = function () {
WebService.stopGen();
};
});
服务:
angular.module("app").service("WebService", function ($http, $interval) {
function makeid() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 5; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var genInterval;
this.generateRandom = function () {
genInterval = $interval(function () {
return makeid();
}, 1000);
return genInterval;
};
this.stopGen = function () {
$interval.cancel(genInterval);
console.log("Stopped");
}
});
答案 0 :(得分:0)
$ interval返回一个承诺,该承诺将在每次迭代时得到通知,在计时器完成运行(间隔完成)时解析,或者如果间隔被取消则拒绝。 https://docs.angularjs.org/api/ng/service/$interval
您无法使用它来获取间隔运行的函数的返回值。我不确定您要实现的目标,但您可以将randomValue保存在您的服务上(并在每次迭代时替换它),这样它就可以从外部访问它。