Здравствуйте!
Вчера, во время тестов приложения, заметил один факт о котором хочу уточнить у вас. Суть вот в чем - есть модальное окно, где юзер вводит данные и загружает excel файл. Далее по кнопке Сохранить происходит следующее: функцией фронта (1) собираются данные со всех инпутов, excel файл записывается в БД (2) и затем запускаю эндпоинт (3), где на бэк передаю данные из 1 и 2. Ну и еще ряд небольших настроек для фронта - свойства кнопки и закрытие модалки по завершении процесса.
Я вчера попробовал заполнить все инпуты, загрузил файл, нажал на кнопку и закрыл вкладку. И вот тут у меня вопрос: эндпоинт 3 у меня все-таки запустился, успел. Но, он не отработал до конца, так как он создал мне не все записи в БД (как было бы, если бы я не закрывал вкладку). Вопрос вот в чем - разве не должен был мой эндпоинт (3) отработать на бэке без ошибок, несмотря на то, что вкладка была закрыта, тем более, что он 100% успел запустится?
@Alexandr_Yaskunov Нет. Если эндпоинт синхронный, то как только будет разорвано соединение клиента (браузера) бэкенд как можно быстрее постарется терминировать текущий запрос. Если бы ваш БП был в транзакции, то изменения в СУБД тоже бы откатились до момента запроса.
Отмена контекста или запроса это стандартный механизм, защищает ваши приложения от перегрузок и возможного DoS. Если требуется чтобы логика продолжала выполняться даже после завершения запроса с фронта - делаете все операции асинхронно: фронт получит код ответа 200 сразу, а вы продолжите в бэкенде выполнять логику пока не завершите.