2017-02-21 7 views
0

Я использую AngularJS и Typcript. В моем конструкторе контроллера я делаю вызов функции, которая получает данные и возвращает обещание. Обещание сохраняется в переменной x.

x.then((data) => { 
    //displays data 
}, (err) => { 
    //sends error message 
}); 

Прямо сейчас, если обещание никогда не разрешается, оно ничего не отображает. Я хочу использовать $timeout, так что если разрешение x займет слишком много времени, оно отобразит другое сообщение. Я не знаю, как я могу это сделать для обещаний. Вызов this.$timeout(3000,true).then(() => {}); просто задерживает содержимое, и я могу отложить функцию. Как я могу прервать, если обещание не будет разрешено?

+0

Возможный дубликат [NodeJS Тайм-аут обещания, если не удалось завершить вовремя] (http://stackoverflow.com/questions/32461271/nodejs-timeout-a-promise-if-failed-to-complete-in-time) –

+1

Возможный дубликат [Установка обработчика тайм-аута по обещанию в угловых] (http://stackoverflow.com/questions/22994871/setting-a-timeout-handler-on-a-promise-in-angularjs) – Nobita

ответ

0

AngularJS v1.6 вводит $q.race method, который может использоваться, чтобы отменить обещание:

var timeoutPromise = $timeout(null, delay).then(() => {throw "Timeout Abort" }); 

var timedPromise = $q.race(xPromise, timeoutPromise); 

В этом примере, timedPromise либо решимость (или выполнены отвергнут) с результатами xPromise или быть отвергнут с причина «Отключение ожидания» в зависимости от того, что наступит раньше.