ks3
Version:
本代码库为`金山云存储KS3`服务.主要提供`KS3 nodejs SDK`和`命令行工具`.
52 lines (41 loc) • 1.35 kB
JavaScript
function createEventDispatcer (client) {
var eventObject = {}
var callbackId = 0
client.on = function (eventName, callback) {
if (!eventObject[eventName]) {
eventObject[eventName] = {}
}
const id = '' + callbackId++
eventObject[eventName][id] = callback
return id
}
client.once = function (eventName, callback) {
if (!eventObject[eventName]) {
eventObject[eventName] = {}
}
const id = 'once_' + callbackId++
eventObject[eventName][id] = callback
return id
}
client.emit = function (eventName, ...args) {
const callbackList = eventObject[eventName]
for (let id in callbackList) {
callbackList[id](...args)
// 如果是订阅一次的 则需要删除
if(id.indexOf('once') > -1) {
delete callbackList[id]
}
}
}
client.off = function (eventName, id) {
delete eventObject[eventName][id]
// 如果是当前eventName里面的最后一个订阅者 则需要将eventName删除
if (!Object.keys(eventObject[eventName]).length) {
delete eventObject[eventName]
}
}
}
var EventDispatcer = function () {
createEventDispatcer(this)
}
module.exports = EventDispatcer