0

我对此有点陌生,所以请耐心等待...

应用程序.js:

var testVariable = require('./test');
console.log(testVariable);

测试.js:

setTimeout(function() {
    exports.something = "HELLO!";
}, 10000);

在这种情况下,输出为{}。如果exports.something = "HELLO!";移到 setTimeout 之外,则输出为{ something: 'HELLO' }

我正在尝试连接到数据库,您可以想象它需要一秒钟。如何将需要一些时间来处理的东西返回给 app.js?

4

1 回答 1

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
});

这个想法是,不是返回值,而是返回一个函数以在值准备好值时执行。(另外,我包含了一些样板文件,以便在分配处理程序之前回调完成时执行)

于 2013-05-25T01:39:52.830 回答