@wfh/thread-promise-pool
Version:
2 Node.js utilities: a thread worker pool and a promise queue
53 lines (47 loc) • 1.61 kB
text/typescript
// 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));
});
});