如何使用require返回异步?

时间:2013-05-25 01:37:56

标签: node.js return

我对此有点新意,请耐心等待......

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的内容?

1 个答案:

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

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