Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let CIRCUIT_BREAKER_TRIP = { /* some data */ };
- let breaker = promise => {
- let broken = false;
- promise.then(() => broken = true);
- return val => {
- if(broken) {
- throw CIRCUIT_BREAKER_TRIP;
- } else {
- return val;
- }
- };
- };
- let resetBreaker = err => {
- if(err !== CIRCUIT_BREAKER_TRIP) {
- throw err;
- }
- }
- let b = new Promise(resolve => {
- setTimeout(() => resolve(), 1000);
- });
- // If the XHR call takes more than a second, the breaker is tripped
- // and `doSomething` is never resolved.
- xhr(...).then(breaker(b)).then(doSomething);
- // use the "resetBreaker" function to normalize breaker errors
- // Here, if the XHR call takes less than a second, `doSomething` happens
- // If it takes longer, it is skipped and the console log takes place
- xhr(...)
- .then(breaker(b))
- .then(doSomething, resetBreaker)
- .then(() => console.log("This always happens."));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement