我有一个GET请求的问题。问题是数据变量没有填充,它是空的,但结果代码是200,没有问题。如果我在浏览器中手动打开链接,数据就在那里。下面是我的代码:
class DataHandler {
constructor(httpRobot, config) {
DataHandler.prototype.httpRobot = httpRobot;
DataHandler.prototype.config = config;
}
}
class GetData extends DataHandler {
constructor(httpRobot, config) {
super(httpRobot, config);
}
R(RURL) {
var data = '';
super.httpRobot.get(RURL, (resp) => {
console.log(resp.statusCode)
resp.on('data', (chunk) => (
data += chunk
))
resp.on('end', () => {
data = JSON.parse(data);
})
});
console.log(data);
return data;
}
}然后用以下命令调用它:
var httpRobot = require('http')
const GetData = require('./scripts/DataHandling/GetData')(httpRobot, config)
GetData.R('theurl')当我调用R方法时,我给它提供了URL,它应该返回数据,但它没有。我已经检查过了,super.httpRobot确实包含http对象。请求正在执行,响应代码为200,但数据仍为空。这是一个我期望收到的JSON对象,我在过去成功地使用过这个代码,但我不明白为什么它现在不能工作。
发布于 2020-05-02 05:47:14
这是因为您不需要等待数据块被加载到数据中。在返回之前,您必须使用Promise或Callback来等待数据。
下面是一个使用Promise的示例:
class GetData extends DataHandler {
constructor(httpRobot, config) {
super(httpRobot, config);
}
R(RURL) {
return new Promise((resolve, reject) => {
let data = '';
super.httpRobot.get(RURL, resp => {
console.log(resp.statusCode);
resp.on('data', chunk => (data += chunk));
resp.on('end', () => {
data = JSON.parse(data);
console.log(data);
resolve(data); //Resolving
});
});
});
}
}
var httpRobot = require('http');
const GetDataInst = new GetData(httpRobot, {});
GetDataInst.R('http://dummy.restapiexample.com/api/v1/employees').then(d=>console.log(d));https://stackoverflow.com/questions/61551086
复制相似问题