Javascript 哲学和事件

标签 javascript node.js events

我目前正在学习 NodeJS 和 Javascript OOP。我需要使用一个使用事件处理程序的包。但我对 Javascript 哲学有点困惑。

我有一个运行如下的 Node 模块:

var Module = require("...");
//...
MyObject.prototype.start = function() {
    var myModule = Module();

    myModule.on('connected', function(device) {
        console.log('New device connected !');

        device.on('status', function(status){
            console.log('Device status : '+status);

            device.transfer("someStuff");
        });
    });
}
//...

我想在“device.on()”事件处理程序之外调用“device”对象的“transfer()”方法。 有没有可能?

提前致谢

编辑:我正在尝试这个

var Module = require("...");

MyObject.prototype.start = function() {
    var myModule = Module();

    myModule.on('connected', function(device) {
        console.log('New device connected !');

        device.on('status', function(status){
            console.log('Device status : '+status);

            //device.transfer("someStuff");
        });
    });
}

MyObject.prototype.transferData = function(){
    device.transfer("someStuff");
}

最佳答案

由于 MyObject 有多种方法想要访问 device,因此您可以通过多种方式进行设计:

  • 实例化 MyObject 时,它会 promise on('connected') 回调并将其存储为 devicePromise。原型(prototype)上的所有方法都遵循以下模式:return this.devicePromise.then(function (device) {/* doWhatever */})。任何返回值的方法现在都返回 promise
  • MyObject 无法直接实例化,只能通过返回 MyObject 实例 Promise 的工厂函数来创建。此工厂函数调用 on('connected'),并使用设置了 device 属性的 MyObject 实例解析返回的 Promise。所有方法都可以访问 this.device

关于Javascript 哲学和事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963960/

相关文章:

javascript - 如何使用 Cypress 从本地上传文件

javascript - 访问文件的序列化内容

javascript - 以下nodejs代码之间的区别

node.js - 吉普错了!构建错误。堆栈错误 : 'make' failed with exit code 2

javascript - jQuery $(window).resize();等效事件监听器,仅在指定的轴更改时触发?

javascript - 回调函数是否在javascript中创建一个新的范围

javascript - 单击更改 <div> 上的内容

javascript - 在react router v4中渲染子路由

python - 对无响应的 Flask 路由的调用设置超时(更新)

events - TCL类C10K事件服务器开发现状如何?