Как узнать, когда cg-busy в angular-busy активно отображается (или как применить minDuration для цепочки обещаний)? - PullRequest
0 голосов
/ 13 февраля 2019

Я использую angular-busy на старой кодовой базе 1.5.9 (да, да, мы скоро мигрируем, ...)

Я использую ее для проверки наличия обновлений... ", и я хочу, чтобы сообщение о занятости отображалось некоторое время, поэтому я установил delay = 0, minDuration = 1500, чтобы оно не выглядело как мерцающее.Обновления обычно занимают <200 мс. </p>

. Как часть обновлений, содержимое того, что находится в моем обновлении диалогового окна $ uibModal, и я использую ng-show, чтобы скрыть его до тех пор, пока мой звонок не будет возвращен.Эта часть прекрасно работает.Но поскольку я использую minDuration cg-busy, содержимое показывается до того, как наложение cg-busy ушло - чего я не хочу.

cg-busy знает, когда он активен и нет.Внутренне он использует дочернюю область видимости для своего класса трекера, который имеет метод $ cgBusyIsActive (), который он использует для своего собственного ng-show.Было бы здорово, если бы у меня был доступ к этому, но, немного изучив, увы, я не могу найти способ добраться до него (и, вероятно, даже не смог бы этого сделать).

Вопрос1: Кто-нибудь знает способ определить, когда cg-busy активен, и использовать его для ng-show или ng-hide?

Вот небольшой фрагмент, показывающий, что я хотел бы:

<div cg-busy="$ctrl.updatesBusy">
  <div ng-show="!$cgBusyIsActive() && $ctrl.updateResult.done">
    ...
   </div>
</div>

Вопрос 2: Или есть более эффективные / различные способы выполнения моего обходного пути ниже, чтобы заставить цепочку обещаний иметь minDuration?

Чтобы обойти это в настоящее время, япросто создайте мой собственный таймер и вставьте тайм-аут в мою цепочку обещаний, которая срабатывает, если в minDuration осталось какое-то время, но я бы хотел решение, которое использует minDuration cg-busy.

const cgTimerStarted = Date.now();
$ctrl.updatesBusy.promise = myUpdateCallAsync()
    .then(function(result) { 
       // blah blah, blah blah
       return $q.resolve(); // return a promise obj or cg-busy will go away
    })
    .catch(function(err) { 
       // boo hoo, boo hoo
       return $q.resolve(); // return a promise obj or cg-busy will go away
    })
    .then(function() {
       const minDuration = $ctrl.updatesBusy.minDuration;
       const timeTaken = Date.now() - cgTimerStarted;
       const timeLeft = Math.max(minDuration - timeTaken, 0);
       return $timeout(timeLeft);
    })
    .finally(function() {
      $ctrl.updatesResult.done = true;
    });
...