# timer-manager-lib

> JS实现的一个定时任务管理器

Latest version **1.0.2** (published 2024-01-25) · ISC license · 0 weekly downloads

## Install

```sh
npm install timer-manager-lib
pnpm add timer-manager-lib
yarn add timer-manager-lib
bun add timer-manager-lib
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2024-01-25 |
| First published | 2024-01-14 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 44.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | diehunter |
| Keywords | timer-manager, js-timer, timer, timer-manager-lib |

## Links

- npm: https://www.npmjs.com/package/timer-manager-lib
- Repository: https://gitee.com/DieHunter/timer-manager-lib
- npm.io page: https://npm.io/package/timer-manager-lib

## Dependencies (1)

- [utils-lib-js](https://npm.io/package/utils-lib-js.md) ^2.0.10

## Recent versions

- 1.0.2 (latest) — 2024-01-25
- 1.0.1 — 2024-01-24
- 1.0.0 — 2024-01-14

## README

# timer-manager-lib

#### 介绍

基于 JS 实现的一个定时任务管理器，可以在 Node 和浏览器环境下使用，你可以轻松地添加、删除、启动、停止和清除定时器，使用同一个 interval 管理全局的 timer，尽可能规避了多个不同的任务复杂性和维护的难度，时间间隔多样性，达到以时间为索引的函数缓存的效果

#### 调试教程

1.  pnpm i
2.  pnpm dev
3.  pnpm build

#### 使用说明

1. 安装

```bash
   npm install timer-manager-lib
   yarn add timer-manager-lib
   pnpm install timer-manager-lib
```

2. 在代码中引入 timer-manager-lib 模块

##### ESModule

```javascript
import { TimerManager } from "timer-manager-lib";
```

##### Commonjs

```javascript
const { TimerManager } = require("timer-manager-lib");
```

##### UMD

```html
<script src="./node_modules/timer-manager-lib/dist/umd/index.js"></script>
<script>
  console.log(TimerManager);
</script>
```

3. 创建一个 Timer 实例

```javascript
const timerManager = new TimerManager({
  type: "interval", // interval 轮询定时器或 frame 帧定时器
  autoStop: true, // 当没有句柄时自动停止定时器
});
```

4. 添加定时器

使用 `add` 方法添加定时器。它接受一个回调函数 (`handle`) 和一个延迟时间：

```javascript
const handle = () => {
  console.log("定时器触发");
};
const delay = 1000; // 时间以毫秒为单位
const timer = timerManager.add(handle, delay);
```

5. 删除定时器

使用 `delete` 方法删除某项定时器，参数提供添加定时器的 timer 对象：

```javascript
timerManager.delete(timer);
```

6. 清除所有定时器

使用 `clear` 方法停止并清除所有定时器：

```javascript
timerManager.clear();
```

7. 启动、暂停对应 delay 的定时器

使用 `startTimer` 和 `stopTimer` 对某个 interval 启动、暂停：

```javascript
const timerManage = new TimerManager();
const { timers } = timerManage;
const timer1 = timerManage.add(() => {
  console.log("hello");
}, 1000);
timerManage.add(() => {
  console.log("阿宇的编程之旅");
}, 1000);
const { delay } = timer1;
timerManage.stopTimer(timers[delay]); // 暂停定时器
setTimeout(() => {
  timerManage.startTimer(timers[delay]); // 1.5秒后启动定时器
}, 1500);
```

8. 自动停止

默认情况下，`autoStop` 选项设置为 `true`。这意味着当没有句柄（timer 的 handlers 为空）时，定时器将自动停止。如果要禁用此行为，请在初始化时将 `autoStop` 设置为 `false`。

9. 综合用法

```javascript
// 创建定时器管理器实例
const timerManager = new TimerManager();
// 记录执行步骤
let count = 0;
// 添加定时器项，执行一次后删除
const timer = timerManager.add(() => {
  timerManager.delete(timer);
  console.log(performance.now(), "del timer", count++);
}, 1000);
// 延时添加定时器项，执行3次后重置
setTimeout(() => {
  console.log(performance.now(), "timer2 start");
  timerManager.add(() => {
    console.log(performance.now(), "timer2", count++);
    if (count > 3) {
      timerManager.clear();
      console.log(performance.now(), "clear");
    }
  }, 1000);
}, 2000);
timerManager.add(() => {
  console.log(performance.now(), "timer3");
}, 500);
```

#### 更多 TS 类型及源码注释参考

https://gitee.com/DieHunter/timer-manager-lib

#### 参与贡献

1.  Fork 本仓库
2.  Star 本仓库
3.  提出建议
4.  新建 Pull Request

---
_Source: https://npm.io/package/timer-manager-lib · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
