Confusion about how the promise returned by $interval works compared to $timeout in Angular

后端 未结 2 822
无人及你
无人及你 2021-01-21 00:52

I\'m having an issue understanding how the promise returned by $interval works in Angular.

Let\'s say in the following example, we have a simple \"api\" factory with a

相关标签:
2条回答
  • 2021-01-21 01:20

    Added the count value to the example that the DIMM Reaper's provided in a comment to Christophe L's answer:

    var app = angular.module("app", []);
    
    app.run(function ($interval) {
        console.log('This fiddle will self destruct...');
        
        var timer = $interval(function (count) {
            console.log('tick... ' + count);
        }, 500, 4, false);
        
        timer.then(function(res) {
            console.log("BOOM! " + res);
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>
    
    <body ng-app="app">
    </body>

    Output:

    This fiddle will self destruct...
    tick... 1
    tick... 2
    tick... 3
    tick... 4
    BOOM! 4
    

    The final result is the final count.

    0 讨论(0)
  • 2021-01-21 01:36

    The only thing you can do with the promise returned by $interval is cancel it (to stop its execution):

    var handle = $interval(someFunc, 1000);
    ...
    $interval.cancel(handle);
    

    Your code should probably look like:

    app.controller('appCtrl', function($scope, $interval, api) {
        $interval(function() {
            console.log(api.getStuff());
        }, 1000);
    });
    

    To be fancy and see everything working together:

    app.controller('appCtrl', function($scope, $interval, $timeout, api) {
        var handle = $interval(function() {
            console.log(api.getStuff());
        }, 1000);
    
        $timeout(function() {
            $interval.cancel(handle);
        }, 5000);
    });
    
    0 讨论(0)
提交回复
热议问题