Как использовать синтаксис конструктора $ q с Angular $ http config.timeout?

0

Поскольку Promise теперь официально специфицирована и все, как мне преобразовать создание обещания $q.defer() в следующем фрагменте, чтобы вместо этого использовать синтаксис конструктора $q(function (resolve, reject) {})?

// Cancel any ongoing $http request so that only the most recent $http
// callback gets invoked
var canceller;
function getThing(id) {
  if (canceller) canceller.resolve();
  canceller = $q.defer();

  return $http.get('/api/things/' + id, {
    timeout: canceller.promise
  });
}

(Fyi из $ http docs: timeout - "... в миллисекундах или обещание, которое должно прервать запрос при его решении").

  • 0
    Я не понимаю, какова ваша цель. Ваш код в порядке и работает, нет причин что-либо менять.
  • 0
    « Как мне использовать синтаксис конструктора обещаний? » - нет!
Показать ещё 4 комментария
Теги:
angular-http
angular-promise

1 ответ

1
Лучший ответ

Я бы сделал это так:

var canceller = null;
function getThing(id) {
  if (canceller) canceller();
  return Promise.resolve($http.get('/api/things/' + id, {
    timeout: new Promise(function(resolve) {
      canceller = resolve;
    })
  }));
}

Я предполагаю, что вы никогда бы не использовали canceller.reject любом случае, так что вы можете просто оставить функцию resolve, чтобы позвонить ей в следующий раз.

  • 0
    $ http.get () возвращает обещание, поэтому я не думаю, что для этого требуется перенос Promise.resolve ()?
  • 0
    @thatmarvin: Он не возвращает одно из тех новых блестящих официально обещанных Promise s, но старое скучное AngularJs-обещание :-) Если вы хотите использовать угловые обещания (и $q вместо new Promise ), тогда вы можете опустить его курс.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню