繁体   English   中英

函数返回未定义的变量Javascript

[英]Function returning undefined variable Javascript

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

module.exports = {
  getTechnicPackInfo: function(id){
    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);    
        return obj; 
      });
    });

    req.end();
  }
}

你没有退货

你遇到的问题是由于函数getTechnicPackInfo没有返回任何值,而不是内部函数。

你想要做的是使用fetch api获取你想要获取的所有东西并返回fetch返回的值。 这允许您执行以下操作:

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

这是有效的,因为fetch返回一个Promise允许你用.json解析数据(它有自己的函数,因为你不能简单地做JSON.parse ),这会返回另一个Promise


默认情况下,节点中不存在fetch

fetch不是node.js中内置的默认函数,因此,您必须在安装node-fetch后导入它。

命令行:

npm install --save node-fetch

Node.js的:

import fetch from 'node-fetch';

您没有从getTechnicPackInfo函数返回任何内容。

你可以做的是使用util.promisify你的http请求,然后返回承诺。

上面的答案是正确的,但节点env中没有api fetch,有一个模块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
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM