Coder Social home page Coder Social logo

aww's Introduction

aww

Async Iterables Interfaces for Web Workers

This is a proof of concept library that enables async iteration with web workers. Errors handling is not yet supported.

npm i -S aww

Do not use the postMessage method of my wrappers while you are async iterating: use the reply method instead.  

How to iterate over the invoker's incoming data (from the worker perspective)

worker.js

import { AISource } from 'aww';

const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));

;(async () => {

    // will handle onmessage events and other stuff
    // it's an async iterable
    const source = new AISource();

    for await(const msg of source) {
      console.log(`${msg.data} received inside worker`);
      await delay(2000, msg); // fake long task

      // next messages from the main will be handled by the async iteration
      // no sense making this awaitable
      // DO NOT USE postMessage!
      source.reply("It's all good from worker!");
    }

})();

main.js

import { AIWorker } from 'aww';

const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));

;(async () => {

    const myWorker = new AIWorker(new Worker('./worker.js'));

    let i = 0;
    while(true) {
        await delay(1000);

        // you can await the response from the worker, but it is not mandatory
        await myWorker.postMessage(i++).then(({data}) => console.log(data));

        /*
          alternative syntax
          const { data } = await myWorker.postMessage(i++);
          console.log(data);
        */
       }

})();

 

How to iterate over the worker's incoming data (from the invoker perspective)

main.js

import { AIWorker } from 'aww';

const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));

;(async () => {

    const myWorker = new AIWorker(new Worker('./worker.js'));

    // will handle onmessage events and other stuff
    // it's an async iterable
    for await(const msg of myWorker) {
      console.log(`${msg.data} received inside main`);
      await delay(2000, msg); // fake long task

      // next messages from the main will be handled by the async iteration
      // no sense making this awaitable
      // DO NOT USE postMessage!
      myWorker.reply("It's all good from main!");
    }

})();

worker.js

import { AISource } from 'aww';

const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));

;(async () => {

    const source = new AISource();

    let i = 0;
    while(true) {
        await delay(1000);

        // you can await the response from the main, but it is not mandatory
        await source.postMessage(i++).then(({data}) => console.log(data));

        /*
          alternative syntax
          const { data } = await source.postMessage(i++);
          console.log(data);
        */
    }

})();

 

How to iterate over both at the same time

main.js

import { AIWorker } from 'aww';

const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));

;(async () => {

    const myWorker = new AIWorker(new Worker('./worker.js'));

    // start the iteration posting a message
    // because both the main and the worker are waiting to start the iteration
    // not awaitable because the subsequent async iteration will handle worker's messages
    // DO NOT USE postMessage!
    myWorker.reply("Please start!");

    for await(const msg of myWorker) {
      console.log(`${msg.data} received inside main`);
      await delay(1000, msg); // fake long task

      // next messages from the main will be handled by the async iteration
      // no sense making this awaitable
      // DO NOT USE postMessage!
      myWorker.reply("It's all good from main!");
    }

})();

worker.js

import { AISource } from 'aww';

const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));

;(async () => {

    const source = new AISource();

    for await(const msg of source) {
      console.log(`${msg.data} received inside worker`);
      await delay(2000, msg); // fake long task

      // next messages from the main will be handled by the async iteration
      // no sense making this awaitable
      // DO NOT USE postMessage!
      source.reply("It's all good from worker!");
    }

})();

aww's People

Contributors

jfet97 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

krispi1 whjvenyl

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.