@async-util/common
v0.5.0
Published
Common tools of async-util
Downloads
183
Readme
common
common tools for async util
Install
npm i @async-util/common
Usage
Note: If you want to use this module in a nodejs app, you should import the lib in .mjs file.
sleep
import { sleep } from '@async-util/common';
async function blabla() {
//...
await sleep(1000); // Sleep for 1000ms(1 second)
//...
}
function helper
import { isAsync, isGenerator, isAsyncGenerator } from '@async-util/common';
async function foo() {}
function *gen() {}
async function *genAsync() {}
isAsync(foo); // true
isGenerator(gen); //true
isAsyncGenerator(genAsync); // true
group / groupAsync
for (const g of group([1,2,3,4,5], 3)) {
console.log(g)
}
async function *genAsync() {
for (const i of [1,2,3,4,5]) {
yield i;
await sleep(500);
}
}
for await (const g of groupAsync(genAsync(), 3)) {
console.log(g)
}
getDataFromEvent
import { getDataFromEvent } from '@async-util/common'
import { EventEmitter } from 'events'
async function main() {
const emitter = new EventEmitter()
const evid = setInterval(() => emitter.emit('data', Date.now()), 500)
setTimeout(() => {
clearInterval(evid)
emitter.emit('end')
}, 5000)
for await (const data of getDataFromEvent(emitter)) {
console.log(data)
}
console.log('event1 done')
const evid2 = setInterval(() => emitter.emit('data', Date.now()), 500)
setTimeout(() => {
clearInterval(evid2)
emitter.emit('error', 'oops')
}, 5000)
for await (const data of getDataFromEvent(emitter)) {
console.log(data)
}
console.log('event2 done, should not happend')
}
main().catch(console.error)
AsyncPool
import { sleep, AsyncPool } from '@async-util/common';
async function Foo(v) {
await sleep(500 + Math.random() * 50);
console.log(v);
}
async function bar() {
console.log('Without pool.');
for (let i = 0; i < 10; i++) {
await Foo(i);
}
console.log('With pool.');
const pool = new AsyncPool(3/* concurrency = 3*/);
for (let i = 0; i < 10; i++) {
await pool.push(() => Foo(i));
}
}