Накратко
Контролерът подава сигнал към операция, която поддържа прекратяване. Интерфейсът трябва да различава отказаното действие от неочаквана грешка.
Полезно е да знаеш
Не всяка започната заявка остава необходима до края. Посетителят може да затвори прозорец, да смени избрания запис или да започне ново търсене. AbortController предоставя обект за управление на прекратяване, а AbortSignal пренася сигнала към асинхронната операция. За да има ефект, операцията трябва да използва този сигнал. Това е конкретна връзка между управляващия код и започнатата работа, а не обща команда всички действия на страницата да спрат. [1, 2]
Контролерът има свойство signal и метод abort. Сигналът може да бъде подаден към fetch, а прекратяването може да засегне заявката, прочитането на тялото и потоци, които поддържат този механизъм. [1] Самият AbortSignal показва дали е прекратен и може да предостави причина. Един вече прекратен сигнал не се превръща отново в неизползван за нов опит. [2] Затова жизненият цикъл на контролера е част от проекта на функцията, а не подробност, която може да бъде забравена.
Представете си измислено поле за намиране на град. Човекът първо въвежда една дума, после я заменя с друга. Екипът може да реши, че предишното търсене вече не е нужно. Преди реализацията е полезно да опише желаното поведение: кои резултати трябва да останат видими и как се показва новото изчакване. Този пример изяснява защо прекратяването има смисъл. То обслужва конкретен избор на интерфейса, вместо да бъде добавено само като техническа украса към всяка заявка.
Важно е намерената причина за приключване да бъде разграничена в приложението. Ако човекът изрично е затворил прозореца, съобщение за неочакван срив би било объркващо. Ако заявката е прекратена заради ново търсене, старият резултат не трябва да бъде представян като актуален само защото неговият код е стигнал до крайна стъпка. Това са изисквания към поведението на конкретната функция. Контролерът предоставя сигнализацията, а програмата определя как да я отрази за посетителя.
В практическа проверка можем да използваме бавен контролиран отговор и последователно да изпълним няколко действия. Започваме търсене, прекратяваме го, започваме ново и наблюдаваме показаните данни. След това проверяваме случая, в който първата операция е приключила преди опита за прекратяване. Такъв тест описва различни моменти от живота на задачата, вместо да приема, че всяко натискане ще настъпи в една и съща част от мрежовия обмен.
При поддръжката е полезно името на контролера да показва коя операция управлява. Отделно се описва кога той се създава и кога вече не се използва. Това прави кода по-лесен за преглед при добавяне на нови действия. AbortController решава ясно ограничен проблем: позволява поддържаната асинхронна работа да получи сигнал за прекратяване. Предвидимият интерфейс се получава, когато този механизъм е свързан с точните потребителски намерения и с проверени крайни състояния.
Източници
За повече подробности и проверка на информацията: