检查何时使用所需文件中的函数

checking when a function in required file is used

我在节点中使用了一个带有几个函数的 js 文件,效果很好。但是其中一个函数需要在我的主js文件中触发一个函数,我不知道如何解决这个问题。

所以我有我的 main.js

const externalObject = require('objectJS');
let myfunctions = require('./stuff/myFunctions.js');

myFunctions.doSomething();

和myFunctions.js

module.exports =  {
    doSomething: function() {
        doSomethingElse();
        return data;
    }
}

function doSomethingElse() {
    //do some stuff
    if (a) {
        return something;
    } else {
        externalObject.action()
       //or
       //inform main.js to do something with externalObject
   }
}

我的问题是我不知道如何访问 myFunctions.js 中的那个外部对象(我不能在那里要求它),或者如何通知我的 main.js 这个对象需要更新.

对此有什么建议吗?

将函数 externalObject.action 本身作为参数传递给 doSomethingElse

const externalObject = require('objectJS');
let myfunctions = require('./stuff/myFunctions.js');

myFunctions.doSomething(externalObject.action);

模块需要对callback参数进行相应处理:

module.exports =  {
    doSomething: function(callback) {
        doSomethingElse(callback);
        return data;
    }
}

function doSomethingElse(callback) {
    //do some stuff
    if (a) {
        return something;
    } else {
        callback()
       //or
       //inform main.js to do something with externalObject
   }
}

通过这样做,从模块内部调用 externalObject.action,您可以根据需要从 externalObject.action 中更新 externalObject

仅供可能使用它的其他人使用:经过大量尝试使用 eventemitter 也是一个解决方案:

myFunctions.js

let EventEmitter = require('events').EventEmitter
const myEmitter = new EventEmitter();

module.exports =  {
myEmitter,
doSomething: function() {
    doSomethingElse();
    return data;
    }
}

function doSomethingElse() {
    //do some stuff
    if (a) {
        return something;
    } else {
        myEmitter.emit('action');
    }
}

并在 main.js

const externalObject = require('objectJS');
let myfunctions = require('./stuff/myFunctions.js');

myfunctions.myEmitter.on('action', function() {
    externalObject.Action();
})

很有魅力。