Skip to content

Instantly share code, notes, and snippets.

@alexeyraspopov
Created September 7, 2018 21:30
Show Gist options
  • Save alexeyraspopov/658dd6f383121b6ebf26f67cee7a1bfe to your computer and use it in GitHub Desktop.
Save alexeyraspopov/658dd6f383121b6ebf26f67cee7a1bfe to your computer and use it in GitHub Desktop.
import React from 'react';
import Coroutine from 'react-coroutine';
import Deferred from './Deferred.js';
export default Coroutine.create(Counter);
async function* Counter() {
let counter = 0;
while (true) {
let event = new Deferred();
yield (
<section>
<p>{counter}</p>
<button onClick={() => event.resolve()}>Increment</button>
</section>
);
await event.isResolved();
counter++;
}
}
export default class Deferred {
constructor() {
this.resolve = null;
this.promise = new Promise(resolve => {
this.resolve = resolve;
});
}
resolve(value) {
this.resolve(value);
}
isResolved() {
return this.promise;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment