在Javascript中,当我从另一个js文件调用此函数时,在控制台输出中未定义。我可以返回称为“ obj”的json对象,并且不对它进行未定义吗?
this.setState
答案 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
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
})