Я пытаюсь реализовать простую функциональность тайм-аута для своего обещания. Цель состоит в том, что если я не получаю ответ, скажем, через 1 секунду, тогда запрос должен быть отменен, т.е. код не должен ждать ответа и не должен вызываться код после успеха. Мне это показалось очень простым кодом, но я не знаю, почему он не работает. Вот мой код:
var canceler = $q.defer();
var timeoutPromise = $timeout(function() {
canceler.resolve(); //abort the request when timed out
console.info("Timed out");
}, 1000);
$http.put(PutUrl, PurDataObject, {timeout: canceler.promise})
.then(function(response){
// control should never come here if the response took longer than 1 second
});
Любая помощь приветствуется. Я использую AngularJS v1.5.5.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нет необходимости использовать $q.defer(), поскольку сервис $timeout уже возвращает обещание:
var timeoutPromise = $timeout(function() {
console.info("Timed out");
return "Timed out";
}, 1000);
$http.put(PutUrl, PurDataObject, {timeout: timeoutPromise})
.then(function(response){
// control should never come here if the response took longer than 1 second
});