javascript - catch rejection in $q service without triggering success callbacks -


i have method returns $q (q) promise:

var subtypesmetadataresolved = restservice.getnodesubtypesmetadata(); 

now, when metadata available, want run 2 functions process them. first, thought chain them this:

subtypesmetadataresolved.then(createnodes).then(preparedataforwidgets) 

but realized since both require data returned subtypesmetadataresolved promise need return data createnodes success callback it's passed preparedataforwidgets, not option. made this:

subtypesmetadataresolved.then(createnodes) subtypesmetadataresolved.then(preparedataforwidgets) 

which works need. problem how rejection callback called when subtypesmetadataresolved rejected , don't neither createnodes nor preparedataforwidgets callbacks triggered in case? have following, after triggering nodesubtypesmetadataerrorcb triggers createnodes callback:

subtypesmetadataresolved.catch(nodesubtypesmetadataerrorcb); subtypesmetadataresolved.then(createnodes) subtypesmetadataresolved.then(preparedataforwidgets) 

here how reject subtypesmetadataresolved:

edit:

function getnodesubtypesmetadata(subtype) {     return $q.when("success!").then(function(){         debugger         throw new error();     }); }  var subtypesmetadataresolved = getnodesubtypesmetadata(); subtypesmetadataresolved.then(successcb1); subtypesmetadataresolved.then(successcb2); subtypesmetadataresolved.catch(nodesubtypesmetadataerrorcb);  $q.all([     typesmetadataresolved,     subtypesmetadataresolved ]).then(init); 

the problem assigning promise handled error subtypesmetadataresolved. if call .then() on this, will call then() callbacks because .catch() callback "handling" error.

to solve this, assign unhandled promise variable, , call .catch()/.then() on that:

var subtypesmetadataresolved = getnodesubtypesmetadata();  subtypesmetadataresolved.catch(nodesubtypesmetadataerrorcb); subtypesmetadataresolved.then(function(){     debugger }); subtypesmetadataresolved.then(function () {     debugger }); 

as matter of style, suggest placing catch line after then lines, should have no observable effect on code's behavior.


Comments

Popular posts from this blog

javascript - AngularJS custom datepicker directive -

javascript - jQuery date picker - Disable dates after the selection from the first date picker -