【问题标题】:Javascript event emitter | Dynamic event nameJavascript 事件发射器 |动态事件名称
【发布时间】:2014-11-20 14:26:43
【问题描述】:

是否可以为每个付款地址创建一个唯一的事件?

这不起作用:

var EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();

function emitpayment(address) {
    ee.emit("payment"+address,data);
}

function receivepayment(address) {
     ee.on("payment"+address, function (data) { 
           // whatever
     });
}

问候,

【问题讨论】:

  • 你试过了吗?事件名称只是字符串。
  • 是的,我在 ee.emit 之后 console.log 一些东西,它没有在控制台上写任何东西。我还在 ee.on 函数中 console.log 一些东西,它没有写任何东西,所以事件没有被触发
  • 您必须在发出事件之前注册事件处理程序。
  • 您还必须在上面的示例代码中声明data,作为“emitpayment”的参数。您上面的代码(带有该修复)工作正常。

标签: javascript events eventemitter


【解决方案1】:

是的,您可以这样做。 Node 中的事件名称(好吧,无论如何都是通过股票 EventEmitter)是简单的字符串。

您确实需要确保在开始发出事件之前注册处理程序:

var EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();

function emitpayment(address, data) {
    ee.emit("payment"+address,data);
}

function receivepayment(address) {
     ee.on("payment"+address, function (data) {
        console.log("received event payment" + address);
        console.dir(data);
     });
}

receivepayment("giant metallic balloon");
emitpayment("giant metallic balloon", { hello: "world" } );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多