发布/订阅模式中的参数如何工作?

时间:2017-10-07 01:51:16

标签: javascript function arguments eventemitter

在一个地方我们使用eventEmitter来生成事件。实际上这是非常常见的方式。

someInstanse.event.on('started', (data, date) => {
    //crazy stuff here
})

在另一个地方,我们试图抓住它。使用箭头功能时一切都很清楚。 'data'和'date'作为参数传递给函数

someInstance.event.on('started', function(data, date) {
});

但这个意思实际上是如何起作用的?我们用发射器确定3个args,现在我们确实只有事件字符串和函数

{{1}}

我想在添加箭头函数之前,这是调用匿名函数的唯一方法

1 个答案:

答案 0 :(得分:1)

这是典型的发布/订阅设计模式。它实际上取决于emit以及订阅者对事件的响应方式是如何实现的。

基本上,在发布功能中,您希望调用每个订阅者(on)函数,并提供带有publish(emit)的信息。下面只是一些伪代码。

function publish(type, ...args) {
    // for each of the subscribers of that type
    for (let i = 0; i < pubsub[type].length; i++) {
        // you could do (this provides the listener with type)
        subscribers[i](type, ...args)
        // or you could do (the subscriber doesn't know the type)
        subscriber[i](...args)
    }
}

如果你想看一下,我在github上写了一个缩小的pub / sub模式。我认为帮助您理解这个问题非常有帮助。 https://github.com/thomasyimgit/pubsub/blob/master/index.js