我在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不输出的证实
关于我怎么解决这个问题有什么指导吗?
发布于 2018-11-16 15:56:59
正如其他人所建议的那样,bind返回一个您可以调用的绑定函数,它实际上并不调用该函数--这就是.apply或.call所做的。@ptdien的解决方案在某种程度上是正确的,但它不会起作用,因为您忘记了返回mongoose.connect返回的承诺,因此连接函数返回未定义,因此调用方没有等待的地方。也就是说,你需要这样做:
export default function connect({ mongoose: mongoose }, url) {
mongoose.Promise = global.Promise;
return mongoose.connect(url);
}
(还请注意,我已经删除了异步关键字,因为当我们不使用await时,这是不必要的--代码已经返回了一个承诺。
此外,bind将在绑定参数之后自动转发参数(即本例中的url ),因此您可以将代码简化为:
module.exports = require("./unbound").default.bind(
null,
{
mongoose: require("mongoose")
}
);
顺便说一句,您必须附加.default的原因是您混合了node.js requires和ES6导入。选一个然后坚持下去。
发布于 2018-11-15 11:23:07
既然聊天受到限制,我就把答案放在这里。在这个片段中,导出一个function,当调用它时,返回另一个function
module.exports = async url => {
return await require("./unbound").default.bind(
null,
{
mongoose: require("mongoose")
},
url
);
};因此,如果您想实际运行它,就必须像require('./')()()那样调用它两次。
https://stackoverflow.com/questions/53311739
复制相似问题