Advertisement
Guest User

Untitled

a guest
Jul 11th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. // Your library code
  2.  
  3. function deferredPromise() {
  4. let resolver = null;
  5. const promise = new Promise(resolve => (resolver = resolve));
  6. return [
  7. resolver,
  8. promise
  9. ];
  10. }
  11.  
  12. function generateSomeGenerator() {
  13.  
  14. let [ selectDoneResolve, selectDonePromise ] = deferredPromise();
  15.  
  16. const someGenetator = function* () {
  17. const state = yield select(); // execution freeze here when called from wrapper
  18. const [newSelectDoneResolve, newSelectDonePromise] = deferredPromise();
  19. selectDoneResolve({
  20. info: state, nextPromise: newSelectDonePromise
  21. });
  22. selectDoneResolve = newSelectDoneResolve;
  23. selectDonePromise = newSelectDonePromise;
  24.  
  25. const result = yield call(someEffect);
  26. return result;
  27. }
  28.  
  29. return {
  30. someGenetator,
  31. selectDonePromise
  32. };
  33.  
  34. }
  35.  
  36. const { someGenetator: someGenetatorImpl, selectDonePromise } = generateSomeGenerator();
  37.  
  38. export const someGenetator = someGenetatorImpl;
  39.  
  40. // Wrapper for interface
  41.  
  42. selectDonePromise.then(watchDone)
  43.  
  44. function watchDone({ info, nextPromise }) {
  45. // Do something with your info
  46. nextPromise.then(watchDone);
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement