recoil-toolkit
Version:
37 lines (32 loc) • 730 B
text/typescript
let instanceId = 0;
function getInstanceId() {
instanceId += 1;
return instanceId;
}
export interface CancelSignal {
signal: unknown;
cancel: () => void;
}
const signalStore: {
[key: string]: {
[instance: number]: CancelSignal;
};
} = {};
export function addCancelSignal(key: string, signal: CancelSignal) {
if (!signalStore[key]) {
signalStore[key] = {};
}
signalStore[key][getInstanceId()] = signal;
}
export function doCancelSignal(key: string) {
if (signalStore[key]) {
Object.values(signalStore[key]).forEach(abortsignal => {
try {
abortsignal.cancel();
} catch {
// ignore
}
});
signalStore[key] = {};
}
}