Advertisement
Guest User

Untitled

a guest
May 30th, 2015
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1.  
  2. let CIRCUIT_BREAKER_TRIP = { /* some data */ };
  3.  
  4. let breaker = promise => {
  5. let broken = false;
  6.  
  7. promise.then(() => broken = true);
  8.  
  9. return val => {
  10. if(broken) {
  11. throw CIRCUIT_BREAKER_TRIP;
  12. } else {
  13. return val;
  14. }
  15. };
  16. };
  17.  
  18. let resetBreaker = err => {
  19. if(err !== CIRCUIT_BREAKER_TRIP) {
  20. throw err;
  21. }
  22. }
  23.  
  24. let b = new Promise(resolve => {
  25. setTimeout(() => resolve(), 1000);
  26. });
  27.  
  28.  
  29. // If the XHR call takes more than a second, the breaker is tripped
  30. // and `doSomething` is never resolved.
  31. xhr(...).then(breaker(b)).then(doSomething);
  32.  
  33.  
  34. // use the "resetBreaker" function to normalize breaker errors
  35. // Here, if the XHR call takes less than a second, `doSomething` happens
  36. // If it takes longer, it is skipped and the console log takes place
  37. xhr(...)
  38. .then(breaker(b))
  39. .then(doSomething, resetBreaker)
  40. .then(() => console.log("This always happens."));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement