@trwite/subscribe
Version:
发布订阅SDK
74 lines (70 loc) • 2.55 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Subscribe = factory());
})(this, (function () { 'use strict';
var Subscribe = /** @class */ (function () {
function Subscribe() {
this.list = {};
}
/**
* @description 创建订阅内容
* @param {string} name
* @param {Function} subscribeFunction
*/
Subscribe.prototype.on = function (name, subscribeFunction) {
var subscribeList = this.list[name] || [];
subscribeList.push(subscribeFunction);
this.list[name] = subscribeList;
};
/**
* @description 发布内容
* @param {string} name
* @param {any[]} args
*/
Subscribe.prototype.emit = function (name) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var fnList = this.list[name] || [];
fnList.forEach(function (fn) { return fn.apply(_this, args); });
};
/**
* @description 关闭已创建的订阅
* @param {string} name
* @param {Function} [subscribeFunction] 传递则删除指定, 不传则删除整个订阅
*/
Subscribe.prototype.off = function (name, subscribeFunction) {
var fnList = this.list[name] || [];
if (subscribeFunction) {
var index = fnList.indexOf(subscribeFunction);
if (index !== -1)
this.list[name].splice(index, 1);
}
else {
delete this.list[name];
}
};
/**
* @description 发布者发布后只订阅一次
* @param {string} name
* @param {Function} subscribeFunction
*/
Subscribe.prototype.once = function (name, subscribeFunction) {
var _this = this;
var onceFn = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
subscribeFunction.apply(_this, args);
_this.off(name, onceFn);
};
this.on(name, onceFn);
};
return Subscribe;
}());
return Subscribe;
}));