38 行
1.0 KiB
TypeScript
38 行
1.0 KiB
TypeScript
import * as fs from 'fs';
|
|
import { PathOrFileDescriptor, WriteFileOptions } from 'fs';
|
|
|
|
class SyncFileDebouncer {
|
|
private static instance: SyncFileDebouncer;
|
|
private readonly debounceTime: number;
|
|
private timers: { [path: string]: NodeJS.Timeout } = {};
|
|
|
|
private constructor(debounceTime: number = 300) {
|
|
this.debounceTime = debounceTime;
|
|
}
|
|
|
|
public static getInstance(debounceTime?: number): SyncFileDebouncer {
|
|
if (!SyncFileDebouncer.instance) {
|
|
SyncFileDebouncer.instance = new SyncFileDebouncer(debounceTime);
|
|
}
|
|
return SyncFileDebouncer.instance;
|
|
}
|
|
|
|
public writeFileSync(
|
|
file: string,
|
|
data: string | NodeJS.ArrayBufferView,
|
|
options?: WriteFileOptions,
|
|
) {
|
|
if (this.timers[file]) {
|
|
clearTimeout(this.timers[file]);
|
|
}
|
|
|
|
this.timers[file] = setTimeout(() => {
|
|
fs.writeFileSync(file, data);
|
|
delete this.timers[file];
|
|
}, this.debounceTime);
|
|
}
|
|
}
|
|
|
|
// 使用示例
|
|
export const fileDebouncer = SyncFileDebouncer.getInstance(500); // 100ms 的 debounce 时间
|