-- РЕДАКТИРОВАТЬ --
Недавно я столкнулся со странной вещью, связанной с обещаниями, но я думаю, что это, возможно, потому, что это противоречит философии обещаний.
Учитывая следующий код:
// Assuming Auth is just a simple lib doing http requests with promises
Auth.signup()
.then(succCall, errCall)
.then(loginSucc, loginErr)
// My callbacks here
function succCall (){
// OK, send second promise
console.log('succCall');
return Auth.login();
}
function errCall(){
// I do some things here and now
// I want to break out from here
console.log('errCall');
}
function loginSucc(){
// This is the callback of the login method when it went OK
// I want to enter here ONLY if with go through the succCall
console.log('loginSucc');
}
function loginErr(){
// This is the callback of the login method when it went not ok
// I want to enter here ONLY if with go through the succCall
console.log('loginErr');
}
Здесь, если что-то пойдет не так в Auth.signup(), вот что будет показано:
- errCall, логинSucc
если я делаю $q.reject() в errCall, вот что происходит:
- errCall, логинErr
и это то, что я хочу:
- errCall... заканчивай, стой здесь
Теперь проблема в том, что он переходит в errCall, когда регистрация идет неправильно, это хорошо, но затем он входит в loginSucc...
Я хочу вырваться из цепочки then, когда встречается какой-либо errorCallback (здесь это errCall или loginErr).
-- РЕДАКТИРОВАТЬ --
Я думаю, что меня неправильно поняли, я хочу полностью разорвать цепочку, не проверяя никаких других «тогда», если что-то пошло не так.
Как будто я говорил: если первое, то неправильно, остановитесь здесь, если первое, то ок, продолжайте, если второе, то ок, продолжайте, если третье, то неправильно, остановитесь.
// Just like if i did the following but by chainning "then" methods
// My callbacks here
function succCall (){
// OK, send second promise
return Auth.login().then(loginSucc, loginErr);
}
Я хочу сказать, что мне не нужен только один обработчик ошибок, если у меня много цепочек "тогда"
reject
промис внутри функцииerrCall
. - person koox00   schedule 21.12.2015catch
и пропустите свои функцииerrCall
иloginErr
и поместите их логику вcatch
. Вам придется посмотреть на ошибку, которую обратный вызовcatch
поймал, но это единственный способ добиться того, что вы хотите. - person Adam   schedule 21.12.2015Auth.signup() .then(succCall, errCall)
,succCall.then(loginSucc, loginErr)
, что-то в этом роде - person koox00   schedule 21.12.2015