Рекурсивное отменяемое обещание (RCP) — это особый вид отменяемого обещания (CP), в котором есть набор инструментов для автоматического завершения RCP, созданный в Это.

Проблема

Представим следующую ситуацию: у нас есть КП, в которой создаются еще две КП с долговременными внутренними процессами, когда на внешний КП приходит сигнал завершения , внутренний CP также должен быть завершен, после чего внешний CP будет разрешен.

В приведенном выше коде возникает состояние гонки между canceledFlag и innerPromise.

Решение

Для решения этой проблемы был разработан инструмент RCP. Он имеет набор инструментов для синхронизации внутренних RCP. В приведенном ниже коде показано, как создать RCP:

Где первые два параметра tryHandle, catchHandle эквивалентны блоку try/catch, а последний параметр — это функция, которая будет вызываться при вызове отмены.

RCP возвращает специальный класс с именем RCPResult. Это помогает безопасно извлечь разрешенное значение и выяснить, чем закончился RCP.

Существует также простой способ обернуть популярный пакет cancelable-promiseв RCP.

Пакет можно найти здесь: npm package. Исходный код: github.

Спасибо, что дочитали до конца, буду рад вашим предложениям.