繁体   English   中英

通过依赖注入传递参数

[英]Passing argument with dependency injection

我在unbound.js中具有以下代码的功能

export default async function connect({ mongoose: mongoose }, URI) {
console.log('in connect');
  mongoose.connect(URI);
  mongoose.Promise = global.Promise; 
  });
}

然后,我有另一个index.js来处理依赖项注入,如下所示

module.exports = async url => {
  return await require("./unbound").default.bind(
    null,
    {
      mongoose: require("mongoose")
    },
    url
  );
};

我所做的与普通香草依赖注入不同的唯一事情是将URL作为参数传递。

当我从index.js调用导出时,没有任何响应。 通过console.log确认不输出

关于如何解决此问题的任何指导?

由于聊天受到限制,因此我将在此处发布答案。 在此代码段中,导出一个function ,该function在被调用时返回另一个function

 module.exports = async url => {
  return await require("./unbound").default.bind(
    null,
    {
      mongoose: require("mongoose")
    },
    url
  );
};

因此,如果要实际运行它,则必须调用两次,例如require('./')()()

正如其他人所建议的那样,bind返回一个可以调用的绑定函数,但实际上并没有调用该函数-那是.apply或.call所做的。 @ptdien的解决方案在某种程度上是正确的,但是它不起作用,因为您忘记了返回mongoose.connect返回的承诺,因此您的connect函数返回未定义的内容,因此没有任何要等待的调用方。 即您需要这样做:

 export default function connect({ mongoose: mongoose }, url) { mongoose.Promise = global.Promise; return mongoose.connect(url); } 

(还要注意,我已经删除了async关键字,因为当我们不使用await时这是不必要的-代码已经返回了promise。

另外,bind会在绑定的参数之后自动转发参数(例如,本例中为url),因此您可以将代码简化为:

 module.exports = require("./unbound").default.bind( null, { mongoose: require("mongoose") } ); 

顺便说一句,您必须附加.default的原因是因为您混合了node.js需求和ES6导入。 选择一个并坚持下去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM