Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Your library code
- function deferredPromise() {
- let resolver = null;
- const promise = new Promise(resolve => (resolver = resolve));
- return [
- resolver,
- promise
- ];
- }
- function generateSomeGenerator() {
- let [ selectDoneResolve, selectDonePromise ] = deferredPromise();
- const someGenetator = function* () {
- const state = yield select(); // execution freeze here when called from wrapper
- const [newSelectDoneResolve, newSelectDonePromise] = deferredPromise();
- selectDoneResolve({
- info: state, nextPromise: newSelectDonePromise
- });
- selectDoneResolve = newSelectDoneResolve;
- selectDonePromise = newSelectDonePromise;
- const result = yield call(someEffect);
- return result;
- }
- return {
- someGenetator,
- selectDonePromise
- };
- }
- const { someGenetator: someGenetatorImpl, selectDonePromise } = generateSomeGenerator();
- export const someGenetator = someGenetatorImpl;
- // Wrapper for interface
- selectDonePromise.then(watchDone)
- function watchDone({ info, nextPromise }) {
- // Do something with your info
- nextPromise.then(watchDone);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement