UNPKG

@wfh/thread-promise-pool

Version:

2 Node.js utilities: a thread worker pool and a promise queue

53 lines (47 loc) 1.61 kB
// tslint:disable: no-console import {queueUp, queue} from '../promise-queque'; describe('promise-queue', () => { it('parallel queueUp() task should work', async () => { const actions = [] as Array<() => Promise<any>>; for (let i = 0; i < 10; i++) { actions.push(() => { const idx = i; console.log(`${idx} start`); return new Promise(resolve => setTimeout(() => { resolve(idx); console.log(`${idx} done`); }, 500)); }); } const res = await queueUp(3, actions); console.log(res, res.length); }); it('create queue and dynamically add async task to it', async () => { const {add} = queue(3); const dones = [] as Promise<number>[]; for (let i = 0; i < 10; i++) { const done = add(() => { const idx = i; console.log(`${idx} start ${new Date().toLocaleTimeString()}`); return new Promise<number>(resolve => setTimeout(() => { resolve(idx); console.log(`${idx} done ${new Date().toLocaleTimeString()}`); }, 500)); }); dones.push(done); } await new Promise(resolve => setTimeout(resolve, 1000)); for (let i = 0; i < 5; i++) { const done = add(() => { const idx = 10 + i; console.log(`${idx} start ${new Date().toLocaleTimeString()}`); return new Promise<number>(resolve => setTimeout(() => { resolve(idx); console.log(`${idx} done ${new Date().toLocaleTimeString()}`); }, 500)); }); dones.push(done); } console.log(await Promise.all(dones)); }); });