使用节点模块的返回值作为变量?

时间:2014-03-11 23:12:31

标签: node.js

我目前正在尝试编写一个简单的小节点模块,以便更轻松地访问API。我遇到的问题是我希望能够致电

var randomVar = myModule.function()

并将该函数的输出分配给变量。我认为它就像返回有问题的值一样容易,但randomVar保持不确定,我在这里明显遗漏了一些东西。

这是我的HTTP请求,似乎相当标准:

exports.function = function(){

    var options = {
        // stuff
    };

    fetchResult = function(options,callback){
        var http = require('http');
        var str = '';

        http.get(options,function(res){

            res.on('data',function(chunk){
                str += chunk;
            });

            res.on('end',function(){
                callback(JSON.parse(str));
            });

        }).on('error', function(e){
            callback(e.message);
        });
    }

    fetchResult(options,function(data){
        console.log(data);
        // what do I do here?
    });
}

底部的console.log输出我想要的数据,但我究竟能做些什么才能将它分配给模块外的变量?

提前非常感谢你。

1 个答案:

答案 0 :(得分:2)

嗯,您尝试返回的函数是异步函数,因此在使用该变量之前,您必须等待操作完成。这就是回调的来源!

exports.function添加名为callback

的参数
exports.function = function (callback) {

callback是将使用您的数据的功能!所以,从fetchResult运行:

callback(data);

现在您可以调用并使用此功能:

myModule.function(function(data) {
    //console.log(data); //the data you want!
});