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

我有一个像这样运行的节点模块:

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时,它会规范on('connected')回调并将其存储为(例如)devicePromise。原型上的所有方法均遵循以下模式:return this.devicePromise.then(function (device) { /* do whatever */ })。现在,任何返回值的方法都将返回promise
MyObject不能直接实例化,只能通过工厂函数创建,该函数返回MyObject实例的承诺。此工厂函数调用on('connected'),并使用设置了MyObject属性的device实例解析返回的promise。所有方法都可以访问this.device

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

10-13 05:18