Скажем, у вас есть API для создания модального типа, который запрашивает у пользователя значение, и вызов для создания этого модального параметра возвращает обещание, которое либо разрешается до заданного значения, либо отклоняется, если модальное окно закрыто / отменено.Пример:
prompt("Enter a value.").then(val => { }).catch(() => { /* closed */ });
Предложенный мной шаблон для работы с отклоненным обещанием для закрытого модального режима состоит в том, чтобы просто добавить оператор catch
с лямбда-выражением «без операции», как показано выше.Проблема заключается в том, что, если вы хотите построить цепочку обещаний, когда модальное значение успешно выполнено , то любые ошибки в последующей логике также будут молча терпеть неудачу из-за лямбды «без операции»:
prompt("Enter a value.")
.then(val => { /* logic that could throw an error */ })
.then(() => { /* method that may return another promise */ })
.catch(() => { }) // Silent fail
.then(() => { /* logic after modal */ })
Очевидным решением было бы просто переместить операторы then
после перехвата «без операции» и перехватить их с помощью новых операторов, но помните, что эти блоки должны выполняться только в том случае, если модал успешен, и поэтомуне может идти после вышеприведенного catch
заявления.
Что бы вы сделали?