обещание / тайм-аут angularjs: условный тайм-аут - PullRequest
0 голосов
/ 13 февраля 2019

Так есть ли возможность достичь .then() только после того, как $scope.counter достигнет 5?

Вот JSFiddle

Каким-то образом использование Promise разрушает мой наблюдатель- применяется только тогда, когда размер окна изменяется.Поэтому я хотел бы знать, смогу ли я сделать это без Promises

<div ng-app="myApp">
    <div ng-controller="myController">
    <div>some{{message}}</div>
    <div>counter: {{counter}} sec</div>
    </div>
</div>

(function(){

var myApp = angular.module('myApp', []);

myApp.controller('myController', function($scope, $timeout){

    //time
    $scope.counter = 0;
    $scope.message = "";

    //timer callback
    var timer = function() {
        $scope.counter++;
        if ($scope.counter > 5) {
            return;
        }
        $timeout(timer, 1000);
    }

    $timeout(timer, 2000).then(function() {
        $scope.message="body once told the world was gonna roll me";
    });       

});

})();

1 Ответ

0 голосов
/ 13 февраля 2019

$timeout не возвращает никакого вида Promise, однако, если вы действительно хотите, чтобы эта работа не выполнялась, вы можете сделать следующее:

var defer = $q.defer();
var timer = function() {
    $scope.counter++;
    if ($scope.counter > 5) {
        defer.resolve(true);
        return;
    }
    $timeout(timer, 1000);
}

$timeout(timer, 2000);
defer.promise.then(function() {
    $scope.message="body once told the world was gonna roll me";
});   

Plunker: https://jsfiddle.net/463srkyj/

Не зная больше о вашем коде, я бы предложил использовать $interval вместо $timeout, если оба значения времени ожидания могут быть одинаковыми.Также спросите, почему бы просто не установить ваше сообщение в вашем if ($scope.counter > 5) условии.

...