Как просмотреть весь список тайм-аутов в браузере? [Дубликат]

Согласно документации Angular JS $http , эта система была исключена из 1.4.3 +. Итак, я получил помощь от его сообщения , и вы можете попробовать таким образом

app.controller('MainCtrl', function ($scope, $http){
   $http({
      method: 'GET',
      url: 'api/url-api'
   }).then(function (success){

   },function (error){

   });
}

ИЛИ

$http.get('api/url-api').then(successCallback, errorCallback);

function successCallback(response){
    //success code
}
function errorCallback(error){
    //error code
}

Я предпочитаю второй, который был более гибким для меня.

31
задан aroth 28 April 2011 в 12:00
поделиться

4 ответа

как просто переписать функцию setTimeout для сортировки пользовательских функций ведения журнала?

, например

var oldTimeout = setTimeout;
window.setTimeout = function(callback, timeout) {
  console.log("timeout started");
  return oldTimeout(function() {
    console.log('timeout finished');
    callback();
  }, timeout);
}

, может работать?

12
ответ дан Quentin Pradet 22 August 2018 в 00:36
поделиться
  • 1
    Да, это не плохая альтернатива. Но это не даст возможности увидеть какую-либо информацию о уже запланированных таймаутах. – aroth 29 April 2011 в 13:22
  • 2
    Ну, если вы можете гарантировать, что этот сценарий будет первым, например, поставить его поверх всех остальных, тогда это должно работать, если вы не хотите взломать внутренние тайм-ауты браузера или что-то еще: D – sharp johnny 18 May 2011 в 07:38
  • 3
    Хотя это сработает, если он начнется первым ... это действительно не отвечает на вопрос – Daniel Sellers 29 March 2012 в 16:12
  • 4
    Вы хотите, чтобы вернуть старую функцию тайм-аута, чтобы получить идентификатор timeoutID – NotSimon 16 April 2013 в 18:57

Мы только что опубликовали пакет, решая эту точную проблему.

npm install time-events-manager

С этим вы можете просмотреть их через timeoutCollection & amp; intervalCollection объектов.

2
ответ дан Bar Goldinfeld 22 August 2018 в 00:36
поделиться

Нет, даже спецификация HTML5 (которая является рационализацией поведения HTML 4.01 в текущих браузерах с дополнительными функциями) не указывает способ перечислить доступные обратные вызовы.

5
ответ дан Gareth 22 August 2018 в 00:36
поделиться
  • 1
    Правда, но спецификация действительно говорит о том, что таймаут должен иметь соответствующий Task, который должен быть помещен внутри Queue в текущий Event-Loop, и что «каждая задача, поставленная в очередь на очередь задач цикл событий, определенный этой спецификацией, связан с Document ". Поэтому, хотя специфика того, как это должно быть сделано и где вещи должны находиться, не является явным, если Document доступен через JavaScript, то, похоже, следует, что Task должен быть также в силу своей «ассоциации» ; с Document. Хотя, возможно, я это неправильно интерпретирую? – aroth 29 April 2011 в 13:01

Вы также можете создать модуль timer manager , который будет отслеживать текущие таймеры и позволит вам получать, добавлять, останавливать и останавливать все таймеры.

var timers = (function() {
  //
  var timers = []

  //
  const getIndex = (array, attr, value) => {
      for (let i = 0; i < array.length; i += 1) {
          if (array[i][attr] === value) {
              return i
          }
      }
      return -1
  };

  // add
  const add = (callback, time) => {
    var id = setTimeout(() => {
      let index = getIndex(timers, 'id', id)
      timers.splice(index, 1)
      callback()
    }, time)
    timers.push({
      id: id,
      time: time,
      debug: callback.toString()
    })
  };

  // get all active timers
  const all = () => timers

  // stop timer by timer id
  const stop = (id) => {
    if (!isNaN(id)) {
      let index = getIndex(timers, 'id', id)
      if (index !== -1) {
        clearTimeout(timers[index].id)
        timers.splice(index, 1)
      }
    }
  };

  // stop all timers
  const stopAll = () => {
    for (let i = 0; i < timers.length; i++) {
      clearTimeout(timers[i].id)
    }
    timers = []
  };

  return {
    add: add,
    all: all,
    stop: stop,
    stopAll: stopAll,
  };
})();

//
timers.add(function() {
  console.log("timeout 1 fired");
}, 1000)

timers.add(function() {
  console.log("timeout 2 wont get fired");
}, 2000)

timers.add(function() {
  console.log("timeout 3 fired");
}, 3000)

timers.add(function() {
  console.log("timeout 4 fired, timers", timers.all());
}, 4000)

timers.add(function() {
  console.log("timeout 5 fired");
}, 5000)

console.log('All timers', timers.all())

console.log("kill timer 2")
timers.stop(2)

Запустите фрагмент, чтобы увидеть его в действии.

0
ответ дан Lawrence Cherone 22 August 2018 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: