Вопрос:Порядок обещаний в AngularJS
Есть ли «легкий» способ отменить ($q
-/$http
-) обещает в AngularJS или определить порядок, в котором обещает были решены?
Пример
У меня долго работает расчет и я запросить результат через $http
. Некоторые действия или события требуют от меня перезапустить расчет (и, таким образом, отправить новый запрос $http
) до того, как будет устранено первоначальное обещание. Таким образом, я полагаю, я не могу использовать простую реализацию как
$http.post().then(function(){
//apply data to view
})
, потому что я не могу гарантировать, что ответы возвращаются в том порядке, в котором я послал запросы - в конце концов я хочу показать результат последний расчет, когда все обещания были решены должным образом.
Однако я хотел бы избежать ожидания первого ответа, пока я не послать новый запрос, как это:
const timeExpensiveCalculation = function(){
return $http.post().then(function(response){
if (isNewCalculationChained) {return timeExpensiveCalculation();}
else {return response.data;}
})
}
Мысли:
При использовании $http
я могу получить доступ к конфи объект на ответ, чтобы использовать некоторые временные метки или другие идентификаторы, чтобы вручную заказывать входящие ответы. Однако я надеялся, что могу просто сказать угловатое как-то отменить устаревшее обещание и, таким образом, не запускать функцию .then(), когда он будет разрешен.
Это не работает без ручной реализации для $q
-продается вместо $http
.
Возможно, просто отказ от обещания - это путь? Но в обоих случаях это может продолжаться вечно до тех пор, пока, наконец, обещание не будет разрешено до того, как будет сформирован следующий запрос (что приводит к пустому виду в то же время).
Есть ли какая-то угловая API-функция, которую я пропущу, или есть прочные шаблоны дизайна или «трюки» с цепочкой обещаний или $ q.all для обработки нескольких обещаний, которые возвращают «одни и те же» данные?
Не знаете, что вы используете для API, но в моем .Net apis. Я использовал SignalR для обработки таких сценариев. – jbrown
Большой вопрос, с нетерпением жду ответов. Но разве было бы намного легче справиться с логикой внутри. Затем вместо того, чтобы пытаться избежать обещания от решения? – user2263572
Возможный дубликат [Обещание - можно ли отменить обещание] (http://stackoverflow.com/questions/30233302/promise-is-it-possible-to-force-cancel-a-promise) –