Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用节点模块的返回值作为变量?_Node.js - Fatal编程技术网

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

Node.js 使用节点模块的返回值作为变量?,node.js,Node.js,我目前正在尝试编写一个简单的小节点模块,以使访问API更容易。我遇到的问题是我想打电话给你 var randomVar = myModule.function() 并将该函数的输出分配给变量。我认为这和返回有问题的值一样简单,但randomVar仍然没有定义,我显然遗漏了一些东西 这是我的HTTP请求,看起来相当标准: exports.function = function(){ var options = { // stuff }; fetchRe

我目前正在尝试编写一个简单的小节点模块,以使访问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输出了我想要的数据,但是为了能够将其分配给模块外的变量,我应该如何处理这些数据呢


非常感谢您。

您尝试从中返回的函数是一个异步函数,因此您必须等待操作完成后才能使用该变量。这就是回调的用武之地

exports.function
中添加一个名为
callback

exports.function = function (callback) {
回调
是将使用您的数据的函数!因此,从
fetchResult
run:

callback(data);
现在您将调用并使用此函数:

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

对不起,我对回调还是比较陌生的。我认为fetchResult()中的回调函数已经在等待操作完成,以查看如何在res.on('end')中调用回调。因此,我在fetchResult()中所做的一切不都应该在http请求成功完成后发生吗?
fetchResult
是调用,该调用中的函数是检索数据后发生的函数。模块中的变量不知道这一点,因此它尝试立即赋值,但失败。回调只是另一个函数调用,允许使用处理后的数据。啊,好的,这是有意义的。我想得不够远,看不到还有别的事情发生。然而,我不确定我是否完全忘记了一些明显的事情,或者是否已经太晚了,但即使我现在传递回调函数,它的作用与以前完全相同。这样做是将“数据”完全分配给结果变量的唯一方法吗<代码>风险值结果=“”;myModule(其他参数,函数(数据){results=data;})不能从从异步操作获取数据的函数中返回数据(
http.get()
)。当函数返回时,数据还没有准备好。请参阅tymeJV的回调建议(下面的答案),作为解决此问题的常用方法。