Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const master = new class {
- constructor() {
- this.done = false;
- this.listeners = [];
- }
- async* makeGenerator(filterCallback) {
- while (true) {
- const {element, resolve} = await new Promise((resolve, reject) => {
- this.listeners.push(resolve);
- });
- if (element === null) {
- resolve();
- break;
- }
- if (filterCallback(element)) {
- yield Promise.resolve(element);
- }
- resolve();
- }
- }
- subscribe(element) {
- const promise = Promise.all(this.listeners.map(listener => {
- return new Promise(resolve => {
- listener({element, resolve});
- });
- }));
- this.listeners = [];
- return promise;
- }
- complete() {
- this.subscribe(null);
- }
- }();
- for (let space of ["a", "b"]) {
- (async function () {
- const result = [];
- console.log("start", space);
- for await (let object of master.makeGenerator(element => element.char === space)) {
- console.log("space", object);
- result.push(object);
- }
- console.log("end", space);
- console.log(result);
- })();
- }
- console.log('test');
- const data = [
- 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2,
- ].map((number, index) => ({char: number === 1 ? "a" : "b", index}));
- (async function () {
- for (let element of data) {
- console.log("element", element);
- await master.subscribe(element);
- }
- master.complete();
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement