UNPKG

@trwite/subscribe

Version:

发布订阅SDK

68 lines (65 loc) 2.1 kB
'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; }()); module.exports = Subscribe;