Остановка распространения промисов JavaScript

Представьте, что у меня есть цепочка обещаний, как показано ниже. Если вызывается func2, я хотел бы избежать вызова func3 или func4 вообще.

AsyncFunction()
.then(func1, func2)
.then(func3, func4)

На данный момент, если я выдам ошибку в func2, будет вызван func4. Если я возвращаю значение в func2, кажется, вызывается func3.

Я использую Angular$q.


person inperspective    schedule 30.11.2014    source источник


Ответы (1)


Используйте вложение для разветвления потока управления. В вашем случае это будет выглядеть так:

AsyncFunction().then(function(res) {
    return func1(res).then(func3, func4);
}, func2);
person Bergi    schedule 30.11.2014
comment
Спасибо за ответ. Знаете ли вы, есть ли способ решить эту проблему без вложения? Похоже, что в некоторых сценариях это может стать довольно грязным. - person inperspective; 01.12.2014
comment
Нет. В структурном программировании вы всегда будете использовать вложенность для чего-то вроде ветвления — рассмотрим простой оператор if. Если вещи становятся слишком сложными, переместите их в свою собственную функцию. - person Bergi; 01.12.2014