У меня есть функция, downloadAsync()
, которая возвращает обещание CommonJS (с использованием Q). Он может потерпеть неудачу двумя способами:Использование обещаний CommonJS: отказ от исключений
- Файл уже может быть загружен, и в этом случае мы сразу узнаем.
- Процесс загрузки может завершиться неудачей, и в этом случае мы знаем некоторое время спустя.
В случае (1), поскольку я знаю, прежде чем что-либо произойдет асинхронно, я мог бы сделать исключение. В случае (2) мне придется отказаться от обещания.
Мой вопрос в том, должен ли мой API быть единообразным и всегда сигнализировать об ошибке, отвергая обещание? Или я должен делать исключения для сразу определяемых недействительных состояний? В качестве другого примера, если пользователь передал мне неверный аргумент, было бы гораздо разумнее ошибиться, чем отклонить обещание.
Некоторая ясность в отношении того, как «исключительное» обещание отклонения действительно было бы здорово; используется ли там карта «один-к-одному» с практикой использования исключений или мы используем ее для не исключительного сбоя?
Я согласен. Хорошо нормализовать код, чтобы обеспечить только один путь потока управления для вашего потребителя. В этом случае я всегда возвращаю обещание, хотя и отвергнутое обещание. Тогда Q гарантирует, что разрешение должно соблюдаться в будущем тике. –
@Kris: только если я загружаюAsync(). Then (...). End() ', правильно? Если я опускаю '.end()', он не знал бы бросить, согласно моему пониманию. – Domenic