【问题标题】:Can't get Angularjs promises working right无法让 Angularjs 承诺正常工作
【发布时间】:2014-01-21 05:55:38
【问题描述】:

我知道在把握承诺时我仍然缺少一些东西。我创建了这个 jsfiddle 来突出我的问题。我试着倒计时然后去 BOOM!然而,繁荣首先到来,然后是倒计时。我做错了什么/错过了什么?

http://jsfiddle.net/urAZ7/1/

HTML

<div ng-app="" ng-controller="Controller">
    <pre>{{output}}</pre>
</div>

JS

function Controller($scope, $q) {
    $scope.output = "Boom Goes the Dynamite in... "
    $scope.countdown = 10;

    var defer = $q.defer();

    defer.promise
        .then(function() {
            var timer = setInterval(function() {
                $scope.output+="\n " + $scope.countdown;
                $scope.$apply();
                if ($scope.countdown === 0) {
                    clearInterval(timer);
                }
                $scope.countdown--;    
            },1000);

            return true
        })
        .then(function(data) {    
            $scope.output+="\n " + "BOOM!!!!!";
        });

    defer.resolve();
}

【问题讨论】:

    标签: javascript angularjs asynchronous promise


    【解决方案1】:

    您应该仅在异步操作完成后才解决 Promise。所以你需要把resolve移动到setInterval

    function Controller($scope, $q) {
        $scope.output = "Boom Goes the Dynamite in... "
        $scope.countdown = 10;
    
        var defer = $q.defer();
    
        defer.promise.then(function() {
            $scope.output += "\n " + "BOOM!!!!!";
        });
    
        var timer = setInterval(function() {
            $scope.output += "\n " + $scope.countdown;
            $scope.$apply();
            if ($scope.countdown === 0) {
                clearInterval(timer);
                defer.resolve(); // <--- resolve here
            }
            $scope.countdown--;
        }, 1000);
    
    }
    

    http://jsfiddle.net/urAZ7/4/

    【讨论】:

    • 感谢您的帮助。但是,我仍然在理解中遗漏了一些东西。如果我有另一个计时器而不是我想在那里链接怎么办?代码看起来如何。例如:jsfiddle.net/urAZ7/6 我希望 timer1 解决然后 timer2 然后 Boom!
    猜你喜欢
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2016-09-05
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多