Поскольку 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
- "... в миллисекундах или обещание, которое должно прервать запрос при его решении").
Я бы сделал это так:
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
, чтобы позвонить ей в следующий раз.
Promise
s, но старое скучное AngularJs-обещание :-) Если вы хотите использовать угловые обещания (и $q
вместо new Promise
), тогда вы можете опустить его курс.