Я новичок в угловом и хочу использовать его для отправки данных на бэкэнд моего приложения. В нескольких случаях я должен сделать несколько сообщений по почте, которые должны либо все преуспеть, либо все провалиться. Это сценарий, который вызывает у меня головную боль: если у вас два HTTP-сообщения, что, если один вызов преуспеет, а другой не удается? Это приведет к несогласованности в базе данных. Я хочу знать, есть ли способ отменить последующие вызовы, если по крайней мере один вызов завершился неудачно. Благодаря!
ответ
Не зная больше о вашей конкретной ситуации, я бы настоятельно рекомендовал вам использовать обработку ошибок обещаний, если вы этого еще не сделали. Есть только одна ситуация, которую я знаю, что вы можете отменить обещание, которое было отправлено, используя параметр таймаута в $ http (посмотрите на this SO post), но вы можете определенно предотвратить будущие запросы. Что происходит, когда вы делаете вызов $ http, это то, что он возвращает объект обещания (смотрите $ q here). Это означает, что он возвращает два метода, которые вы можете связать с запросом $ http, называемым успехом и неудачей, поэтому он выглядит как $ http.success ({... stuff ...}). Error ({... more stuff. .}). Поэтому, если у вас есть обработка ошибок в каждом из этих сценариев, и вы получаете .error, не делайте следующий вызов.
Вы можете отменить следующие запросы в цепочке, но предыдущие уже отправлены. Вам необходимо предоставить необходимые функциональные возможности для их обратного преобразования.
Если каждый шаг зависит от другого и вызывает изменения в вашей базе данных, возможно, лучше всего выполнить весь процесс в бэкэнд, вызванный одним запросом «POST». Я думаю, что проще моделировать этот процесс синхронно, и это проще сделать на сервере, чем на клиенте.
Однако, если вы должны выполнять почтовые запросы на стороне клиента, вы можете определить каждый шаг запроса как отдельную функцию и связать их с помощью then(successCallback, errorCallback)
(пример Nice video здесь: https://egghead.io/lessons/angularjs-chained-promises).
В вашем случае, на каждом шаге вы можете проверить, если предыдущий не удалось действия предпринять, чтобы полностью изменить его с помощью обратного вызова ошибки then
:
var firstStep = function(initialData){
return $http.post('/some/url', data).then(function(dataFromServer){
// Do something with the data
return {
dataNeededByNextStep: processedData,
dataNeededToReverseThisStep: moreData
}
});
};
var secondStep = function(dataFromPreviousStep){
return $http.post('/some/other/url', data).then(function(dataFromServer){
// Do something with the data
return {
dataNeededByNextStep: processedData,
dataNeededToReverseThisStep: moreData
}
}, function(){
// On error
reversePreviousStep(dataFromPreviousStep.dataNeededToReverseThisStep);
});
};
var thirdFunction = function(){ ... };
...
firstFunction(initialData).then(secondFunction)
.then(thirdFunction)
...
Если какой-либо из этапов в цепи не удается, это обещание потерпит неудачу, и следующие шаги не будут выполнены.
- 1. Отмена HTTP-сервера запроса POST
- 2. HTTP POST с помощью Angular.js
- 3. Nativescript multiple fetch http post
- 4. Angular.JS HTTP POST Data Not Sending
- 5. C++ dynamic_cast поведение при отказе при отказе
- 6. Отмена запроса POST
- 7. $ http сообщение в Angular.js
- 8. Отмена запроса POST «HttpClient»
- 9. Ошибка POST с Angular.js
- 10. Symfony Multiple Post Validators
- 11. Предотвращать оповещение при отказе
- 12. $ HTTP-сервис в Angular.js
- 13. Angular.js $ http cors
- 14. оттянуть angular.js $ службы HTTP
- 15. jquery post multiple submit
- 16. jquery, post multiple variables
- 17. multiple checkbox post form
- 18. Angular.js HTTP Get using $ routeParams
- 19. HTTP Post Upload Multiple Files from iOS to PHP
- 20. http: multiple response.WriteHeader calls
- 21. ColorBox - всплывающее окно закрывается при отказе проверки
- 22. $ HTTP POST & Passport.Js Перенаправление
- 23. Отмена ответа HTTP/1.1 chunk
- 24. Curl - 7.21.5 Отмена HTTP-запроса
- 25. Отмена HTTP-соединения в iOS
- 26. Erlang Сбой при успешном отказе
- 27. Форма перенаправления при отказе проверки
- 28. Маршрутизация Rails при отказе проверки?
- 29. СУБД для использования при отказе
- 30. Ошибка при отказе Postgres Ошибка