All Projects → jfet97 → Aww

jfet97 / Aww

Licence: mit
Async Iterables Interfaces for Web Workers

Programming Languages

javascript
184084 projects - #8 most used programming language
es6
455 projects

Labels

Projects that are alternatives of or similar to Aww

Base64 Async
Non-blocking chunked Base64 encoding
Stars: ✭ 98 (-13.27%)
Mutual labels:  async
Embassy
Rust Embedded async executor and HALs
Stars: ✭ 100 (-11.5%)
Mutual labels:  async
Tedis
redis client with typescript and esnext for nodejs
Stars: ✭ 109 (-3.54%)
Mutual labels:  async
Nginx Haskell Module
Nginx module for binding Haskell code in configuration files for great good!
Stars: ✭ 99 (-12.39%)
Mutual labels:  async
Fsharp.control.fusiontasks
F# Async workflow <--> .NET Task/ValueTask easy seamless interoperability library.
Stars: ✭ 101 (-10.62%)
Mutual labels:  async
Open.channelextensions
A set of extensions for optimizing/simplifying System.Threading.Channels usage.
Stars: ✭ 106 (-6.19%)
Mutual labels:  async
Meinheld
Meinheld is a high performance asynchronous WSGI Web Server (based on picoev)
Stars: ✭ 1,339 (+1084.96%)
Mutual labels:  async
Ws Machine
WS-Machine is a websocket finite state machine for client websocket connections (Go)
Stars: ✭ 110 (-2.65%)
Mutual labels:  async
Acme
Async ACME library written in PHP based on the Amp concurrency framework.
Stars: ✭ 102 (-9.73%)
Mutual labels:  async
Snug
Write reusable web API interactions
Stars: ✭ 108 (-4.42%)
Mutual labels:  async
Datastore
🐹 Bloat free and flexible interface for data store and database access.
Stars: ✭ 99 (-12.39%)
Mutual labels:  async
Dapeng Soa
A lightweight, high performance micro-service framework
Stars: ✭ 101 (-10.62%)
Mutual labels:  async
Redis
Async Redis Client for PHP based on Amp.
Stars: ✭ 107 (-5.31%)
Mutual labels:  async
Governor
A rate-limiting library for Rust (formerly ratelimit_meter)
Stars: ✭ 99 (-12.39%)
Mutual labels:  async
Aiometer
A Python concurrency scheduling library, compatible with asyncio and trio.
Stars: ✭ 110 (-2.65%)
Mutual labels:  async
Gruvi
Async IO for Python, Simplified
Stars: ✭ 96 (-15.04%)
Mutual labels:  async
Fastapi Plugins
FastAPI framework plugins
Stars: ✭ 104 (-7.96%)
Mutual labels:  async
Symfony Async Kernel
[Deprecated] Symfony Async Kernel adpater
Stars: ✭ 111 (-1.77%)
Mutual labels:  async
Babel Plugin Mobx Deep Action
Reduces `action` and `runInAction` boilerplates
Stars: ✭ 110 (-2.65%)
Mutual labels:  async
Micro
Asynchronous HTTP microservices
Stars: ✭ 9,987 (+8738.05%)
Mutual labels:  async

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!");
    }

})();
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].