Angular - 无法从$ interval返回承诺获取数据流

时间:2017-02-28 14:53:47

标签: angularjs angular-promise

我正在学习如何使用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");
    }
});

1 个答案:

答案 0 :(得分:0)

$ interval返回一个承诺,该承诺将在每次迭代时得到通知,在计时器完成运行(间隔完成)时解析,或者如果间隔被取消则拒绝。 https://docs.angularjs.org/api/ng/service/$interval

您无法使用它来获取间隔运行的函数的返回值。我不确定您要实现的目标,但您可以将randomValue保存在您的服务上(并在每次迭代时替换它),这样它就可以从外部访问它。