节点js,函数执行

时间:2017-07-18 08:36:47

标签: javascript node.js

我对节点js执行函数有疑问。代码示例

const dynamic = require('dynamic'),
      obj1 = dynamic.obj1,
      ovj2 = dynamic.obj2;

const myFunction1 = () => {
      let x = obj1  
      };

const myFunction2 = () => {
      let x = obj2  
      };

module.exports.myFunction1 = myFunction1;
module.exports.myFunction2 = myFunction2;

问题是如何设计此代码以便每次调用myFunctions时都能从动态变量中获取更新值。因为require只在模块的开头工作一次。动态是静态的,如何为它做出解决方案?

2 个答案:

答案 0 :(得分:1)

如果您是dynamic模块的所有者,您可以将其更改为从该模块导出函数而不是对象,这要归功于require方法的这种缓存机制不会成为问题。然后,您可以在模块中的每个位置调用此模块中的函数,并且可以重新更新值

//  dynamic.js
module.exports = () => {

  return {
    obj1,
    obj2
  };
};


//and in another module
const dynamic = require('dynamic'),
  // then in code you can do this
  obj1 = dynamic().obj1,
  ovj2 = dynamic().obj2;

答案 1 :(得分:1)

这应该按照您的预期运作:

const dynamic = require('dynamic');

const myFunction1 = () => {
  const x = dynamic.obj1;
};

const myFunction2 = () => {
  const x = dynamic.obj2;
};

module.exports.myFunction1 = myFunction1;
module.exports.myFunction2 = myFunction2;