尝试导出由函数创建的值,并且只能通过回调访问。不知道如何处理这个问题。
require("lib").doThing("thing", function(value) {
// need to get value to the top level in order to export it
});
module.exports = value;
答案 0 :(得分:0)
如果doThing
是同步的,这将有效:
require("lib").doThing("thing", function(value) {
module.exports = value;
});
如果它是异步的,您必须导出一个对象,然后在回调触发时改变对象上的属性:
require("lib").doThing("thing", function(value) {
module.exports.value = value;
});
module.exports = {};
答案 1 :(得分:0)
在带回调的函数中包装,导出整个函数:
function getValue(callback) {
require("lib").doThing("thing", function(value) {
// need to get value to the top level in order to export it
callback(value);
});
}
module.exports.getValue = getValue;
然后致电:
exportedVar.getValue(function(val) {
console.log(val);
});
答案 2 :(得分:0)
没有理由让它达到顶级水平。只要在回调中包含值或导出promise时输出它:
require("lib").doThing("thing", function(value) {
// need to get value to the top level in order to export it
module.exports = value;
});
如果上面的上述回调是异步的,那么您将遇到时间问题,因为加载您的模块的人无法准确获取该属性,直到完成异步功能并且他们不知道当确切的时间是。
有很多方法可以解决这个问题,但一种很好的方法是导出一个promise而不是value。然后,呼叫者可以在承诺上调用.then()
来获取值。
module.exports = new Promise(function(resolve) {
require("lib").doThing("thing", function(value) {
// need to get value to the top level in order to export it
resolve(value);
});
});
然后,这个模块的调用者会做这样的事情:
require('someModule').then(function(value) {
// process the value here
});
答案 3 :(得分:-1)
目前还不清楚你要做什么,但你总是可以从匿名函数中返回一个值。
module.exports = require("lib").doThing("thing", function(value) {
// need to get value to the top level in order to export it
return value;
});