правильный способ разорвать цепочку обещаний при первом отклонении

У меня есть цепочка обещаний, которая требует, чтобы отклонение обрабатывалось по-разному для отдельных шагов:

serviceA.getData()
    .then(
        function(dataA) {
            return serviceB.getData(dataA);
        }, function(err) {
            res.status(404).end();
        }
    )
    .then(
        function(dataB) {
            return serviceC.getData(dataB);
        }, function(err) {
            res.status(401).end();
        }
    )
    .done();

Когда обещание serviceA.getData() отклоняется, я хочу, чтобы цепочка обещаний прерывалась после выполнения первого обработчика отклонения. Вместо этого выполняются оба обработчика отказа.

Не удалось найти ответ в документах Q. Предложения?


person Arnold Zokas    schedule 20.10.2014    source источник
comment
Именно так и должны работать промисы: вы можете поместить свой код в блок try-catch и передать информацию о типе ошибки, которая произошла внешнему (try catch) коду из ваших обработчиков отклонения путем throwing исключений.   -  person Hrishi    schedule 20.10.2014