我对此有点新意,请耐心等待......
app.js:
var testVariable = require('./test');
console.log(testVariable);
test.js:
setTimeout(function() {
exports.something = "HELLO!";
}, 10000);
在此方案中,输出为{}
。如果将exports.something = "HELLO!";
移到setTimeout之外,则输出为{ something: 'HELLO' }
。
我正在尝试连接到数据库,而且正如您想象的那样需要一秒钟。如何返回需要一段时间才能处理到app.js的内容?
答案 0 :(得分:2)
你不能。
require
是同步的,节点最初有异步需求,但它被删除,因为人们最终滥用它,并且它没有很好地维护。
我建议你做点什么
exports.something = promise;
返回值的承诺或回调处理程序。
最简单的实现可能是
var callback=function(){},fired=false,data;
exports.handle = function(cb){
callback = cb;
if(fired === true){ //already fired once
cb(data);//fire again
}
});
setTimeout(function() {
cb("HELLO!");
fired = true;
data = "HELLO!";
}, 10000);
然后你可以使用
require("myModule").handle(function(data){
//work with data
});
我们的想法是,不是返回值,而是返回一个函数,以便在值准备就绪时执行。 (另外,我已经包含了一些样板文件,以便在分配处理程序之前完成回调时执行)