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

Payment information shows nothing in one page checkout page magento -

tcpdump - How to check if server received packet (acknowledged) -