Q: Обещание Цепочка и Отказ: Разве отказ не убивает цепь? - PullRequest
0 голосов
/ 23 января 2019

У меня есть следующие цепочечные функции, которые все реализуют обещания, использующие Q:

validateToken(context).then(parseFormData, get403).then(createReport, get400).then(send200, get400).catch(get500);

например, все они имеют где-то внутри них:

let deferred = q.defer();
..
deferred.resolve(true);
deferred.reject(false);
return deferred.promise;

Первая функция validateToken вызывает отложенную.reject.Это приводит к тому, что get403 вызывается, как и ожидалось;но createReport, get400 и get500 также называются?Это смущает меня.Я думал, что только первый обработчик ошибок попал в цепочку?

Может кто-нибудь объяснить, что происходит, и есть ли способ для меня получить желаемое поведение, где только самый непосредственный обработчик отклонения / ошибкизвонил?

1 Ответ

0 голосов
/ 23 января 2019

Это зависит от того, что on403 возвращает. Если ничего, то предполагается, что это решение, которое объясняет поведение, которое вы видите. Помните, что onReject эквивалентно catch, который, как концепция, позволяет вам продолжить обработку, как если бы ошибка не произошла

Если вы хотите продолжить цепочку брака, вам нужно return Promise.reject(). В противном случае вы должны переосмыслить цепочку своих обещаний.

...