# @tb-app/pub-sub

> 提供发布订阅模式的库

Latest version **0.5.0** (published 2023-04-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install @tb-app/pub-sub
pnpm add @tb-app/pub-sub
yarn add @tb-app/pub-sub
bun add @tb-app/pub-sub
```

## Health

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

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

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.5.0 |
| Published | 2023-04-25 |
| First published | 2021-05-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 11.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | noshower |
| Maintainers | noshower |
| Keywords | publish, subscribe, unsubscribe |

## Links

- npm: https://www.npmjs.com/package/@tb-app/pub-sub
- Repository: https://github.com/noshower/tb-app
- Homepage: https://github.com/noshower/tb-app/tree/main/packages/pub-sub
- Issues: https://github.com/noshower/tb-app/issues
- npm.io page: https://npm.io/package/@tb-app/pub-sub

## Recent versions

- 0.5.0 (latest) — 2023-04-25
- 0.4.1 — 2021-06-21
- 0.4.0 — 2021-05-25
- 0.3.0 — 2021-05-25
- 0.2.0 — 2021-05-24
- 0.1.0 — 2021-05-23

## README

# `@tb-app/pub-sub`

## 简介

这是一个基于 JavaScript 的发布订阅库。

## 安装

```js
yarn add @tb-app/pub-sub
// 或
npm i @tb-app/pub-sub
```

## 特点

- 零依赖
- 支持 TypeScript
- 支持 ES 模块

## API

#### subscribe(name,callback)

订阅名称为 name 的消息，并返回字符串 token。token 可以用来取消产生此 token 的订阅

```js
import { subscribe, unsubscribe } from '@tb-app/pub-sub';
const callback = function (name, data) {
  console.log(name, data);
};
const token = subscribe('say', callback);
// 可以通过 token 取消订阅
unsubscribe(token);
```

#### publish(name,data)

发布名称为 name 的消息，并返回布尔值。true, 表示成功触发指定消息的回调。 false, 要触发的消息不存在或消息没有回调。

```js
import { subscribe, publish } from '@tb-app/pub-sub';
const callback = function (name, data) {
  console.log(name, data);
};
const token = subscribe('say', callback);

setTimeout(() => {
  publish('say', 'hello !');
}, 1000);
```

#### clearSubscriptions(name)

清除指定名称的消息订阅

```js
import { subscribe, clearSubscriptions } from '@tb-app/pub-sub';
const callback = function (name, data) {
  console.log(name, data);
};
subscribe('say', callback);

setTimeout(() => clearSubscriptions('say'), 1000);
```

#### unsubscribe(name)

清除指定的名称或 token 或函数对应的订阅。返回结果为布尔值，true 表示成功取消订阅。false，表示取消失败（订阅不存在）。

```js
import { subscribe, unsubscribe } from '@tb-app/pub-sub';
const callback = function (name, data) {
  console.log(name, data);
};
const token = subscribe('say', callback);

setTimeout(() => {
  // 通过消息名称取消订阅
  unsubscribe('say');
  //  通过 token 取消订阅
  //  unsubscribe(token);
  // 通过函数取消订阅
  unsubscribe(callback);
}, 1000);
```

#### clearAllSubscriptions

清除所有订阅

```js
clearAllSubscriptions();
```

#### getSubscriptions(name)

得到指定名称消息的所有回调函数数组

```js
import { subscribe, unsubscribe } from '@tb-app/pub-sub';
const callback = function (name, data) {
  console.log(name, data);
};
subscribe('say', callback);
// 返回 [callback]
getSubscriptions('say');
```

#### subscribeOnlyOne(name,callback)

订阅消息，但是相同的消息名称，只能订阅一次

```js
import { subscribeOnlyOne } from '@tb-app/pub-sub';
const callback = function (name, data) {
  console.log(name, data);
};
subscribeOnlyOne('say', callback);
// 下面代码将会报错
// subscribeOnlyOne('say', callback);
```

#### subscribeOnce

订阅消息，但是回调只会被调用一次，即调用后会立即取消订阅

```js
import { subscribeOnce } from '@tb-app/pub-sub';
const callback = function (name, data) {
  console.log(name, data);
};
subscribeOnce('say', callback);
setTimeout(() => {
  publish('say', 'hello !');
  // 第二次 publish 不会触发 callback
  publish('say', 'hello !');
}, 1000);
```

---
_Source: https://npm.io/package/@tb-app/pub-sub · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
