首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用依赖注入传递参数

用依赖注入传递参数
EN

Stack Overflow用户
提问于 2018-11-15 02:52:02
回答 2查看 91关注 0票数 0

我在unbound.js中使用了以下代码

代码语言:javascript
复制
export default async function connect({ mongoose: mongoose }, URI) {
console.log('in connect');
  mongoose.connect(URI);
  mongoose.Promise = global.Promise; 
  });
}

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

代码语言:javascript
复制
module.exports = async url => {
  return await require("./unbound").default.bind(
    null,
    {
      mongoose: require("mongoose")
    },
    url
  );
};

对于普通的依赖项注入,我所做的唯一不同之处就是将URL作为参数传递。

当我从index.js调用导出时,没有得到响应。这一点得到了console.log不输出的证实

关于我怎么解决这个问题有什么指导吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-16 15:56:59

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

代码语言:javascript
复制
export default function connect({ mongoose: mongoose }, url) {
  mongoose.Promise = global.Promise; 
  return mongoose.connect(url);
}

(还请注意,我已经删除了异步关键字,因为当我们不使用await时,这是不必要的--代码已经返回了一个承诺。

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

代码语言:javascript
复制
module.exports = require("./unbound").default.bind(
    null,
    {
      mongoose: require("mongoose")
    }
);

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

票数 0
EN

Stack Overflow用户

发布于 2018-11-15 11:23:07

既然聊天受到限制,我就把答案放在这里。在这个片段中,导出一个function,当调用它时,返回另一个function

代码语言:javascript
复制
 module.exports = async url => {
  return await require("./unbound").default.bind(
    null,
    {
      mongoose: require("mongoose")
    },
    url
  );
};

因此,如果您想实际运行它,就必须像require('./')()()那样调用它两次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53311739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档