@tb-app/pub-sub
v0.5.0
Published
提供发布订阅模式的库
Downloads
9
Maintainers
Readme
@tb-app/pub-sub
简介
这是一个基于 JavaScript 的发布订阅库。
安装
yarn add @tb-app/pub-sub
// 或
npm i @tb-app/pub-sub
特点
- 零依赖
- 支持 TypeScript
- 支持 ES 模块
API
subscribe(name,callback)
订阅名称为 name 的消息,并返回字符串 token。token 可以用来取消产生此 token 的订阅
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, 要触发的消息不存在或消息没有回调。
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)
清除指定名称的消息订阅
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,表示取消失败(订阅不存在)。
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
清除所有订阅
clearAllSubscriptions();
getSubscriptions(name)
得到指定名称消息的所有回调函数数组
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)
订阅消息,但是相同的消息名称,只能订阅一次
import { subscribeOnlyOne } from '@tb-app/pub-sub';
const callback = function (name, data) {
console.log(name, data);
};
subscribeOnlyOne('say', callback);
// 下面代码将会报错
// subscribeOnlyOne('say', callback);
subscribeOnce
订阅消息,但是回调只会被调用一次,即调用后会立即取消订阅
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);