21 lines
449 B
TypeScript
21 lines
449 B
TypeScript
export function createDeferredResultDelivery<T extends { id: string }>() {
|
|
const pending = new Map<string, T>();
|
|
|
|
return {
|
|
defer(result: T) {
|
|
pending.set(result.id, result);
|
|
},
|
|
consume(ids: Iterable<string>) {
|
|
for (const id of ids) pending.delete(id);
|
|
},
|
|
drain() {
|
|
const results = [...pending.values()];
|
|
pending.clear();
|
|
return results;
|
|
},
|
|
clear() {
|
|
pending.clear();
|
|
},
|
|
};
|
|
}
|