函数返回未定义的变量Javascript

时间:2018-07-05 01:44:02

标签: javascript node.js

在Javascript中,当我从另一个js文件调用此函数时,在控制台输出中未定义。我可以返回称为“ obj”的json对象,并且不对它进行未定义吗?

this.setState

3 个答案:

答案 0 :(得分:2)

您什么都没退

您遇到的问题是由于根本没有从函数getTechnicPackInfo而不是内部函数返回任何值引起的。

您要做的是使用fetch api来获取您尝试获取的所有内容,并返回fetch返回的值。这使您可以执行以下操作:

getTechnicPackInfo(...).then(resultingData => resultingData.json()).then(parsedData => ...)

之所以可行,是因为fetch返回一个Promise,然后您可以使用.json解析数据(它具有自己的功能,因为您不能简单地执行JSON.parse)返回另一个Promise


默认情况下,

fetch在Node中不存在

fetch不是node.js内置的默认功能,因此,您必须在安装node-fetch之后将其导入。

命令行:

npm install --save node-fetch

Node.js:

import fetch from 'node-fetch';

答案 1 :(得分:1)

您没有从getTechnicPackInfo函数返回任何信息。

您可以做的是使用util.promisify您的http请求,然后返回promise。

答案 2 :(得分:0)

上面的答案是正确的,但是节点env中不存在api提取,有一个模块npm来添加它:“ node-fetch”。

如果您不想安装此模块,一个解决方案是将回调参数添加到函数getTechnicPackInfo()中:

file1.js:

module.exports = {
    getTechnicPackInfo: function(id, callback){
        var http = require("https");
        var options = {
            "method": "GET",
            "hostname": "solder.io",
            "path": "/api/aurora-crafters/modpacks/" + id,
            "headers": {
                "accept": "application/json",
                "content-type": "application/Json",
                "authorization": "Bearer 00000000000000000000000000000"
            }
        };
        var req = http.request(options, function (res) {
            var chunks = [];

            res.on("data", function (chunk) {
                chunks.push(chunk);
            });

            res.on("end", function () {
                var body = Buffer.concat(chunks);
                var obj = JSON.parse(body);    
                callback(obj); 
            });
        });
        req.end();
    }
}

file2.js

var f = require('./file1.js');
f.getTechnicPackInfo(123456, function(obj) {
    //do what you need with obj
})