Module @tscommon/synchronized

Functions§

Source§

synchronized<T extends (...args: any) => Promise<any>>(
    _target: object,
    _propertyKey: string | symbol,
    descriptor: TypedPropertyDescriptor<T>,
): TypedPropertyDescriptor<T>

Synchronize method calls on the same object.

// tsconfig.json
{
"compilerOptions": {
"experimentalDecorators": true
}
}
import { synchronized } from '../src/index.js';

class MyObject {
@synchronized // Decorator to synchronize method calls
public async process(id: string): Promise<void> {
console.log(id, 'Started');
return new Promise((resolve) => {
queueMicrotask(() => {
console.log(id, 'Ended');
resolve();
});
});
}
}

const o = new MyObject();

o.process('A');
o.process('B');
o.process('C');