我还是Node.JS的新手,我正在尝试使用GET方法调用REST API。 我使用此link中的“请求”包。该调用实际上有效但当我尝试从其他.JS文件返回响应主体时,我得到'未定义'。
这是我的'first.js'
var request = require('request');
var first = function (){
};
first.prototype.getValue = function (value){
var thpath = somePath + value;
var postheaders = {
'Content-Type': 'x-www-form-urlencoded'
};
var options = {
url : 'https://' + thpath,
method : 'GET',
headers : postheaders,
};
var data_rec = "";
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
data_rec = JSON.parse(body);
console.info(data_rec);
return data_rec;
} else return "failed to get";
});
};
module.exports = first;
这是我的'second.js'
var first = require('./first');
var instance = new first();
var val1 = instance.getValue(someValue);
console.info(val1);
'first.js'中的'console.info(data_rec)'返回一个JSON(这意味着该调用正在运行)。但是,'second.js'中的'console.info(val1)'返回'undefined'。任何人都可以找到解决方案吗?
更新: 我可以使用sync-request包来获得解决方案。
答案 0 :(得分:0)
var val1 = instance.getValue(someValue);
console.info(val1);
instance.getValue
是一种异步方法。意思是javascript vm不会等待响应,它继续下一行,即console.info(val1);
Ajax请求需要时间,响应只在一段时间后进入,并触发成功函数。然后val1未定义
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
data_rec = JSON.parse(body);
console.info(data_rec);
return data_rec;
} else return "failed to get";
});
在成功函数中看到console.info(data_rec);
,成功函数是在成功检索到响应后调用的函数
答案 1 :(得分:0)
您尝试以同步方式返回异步响应,这是不可能的。
当您拨打电话时,执行first()
并返回没有值,然后异步调用完成。因此console.log
打印正确,但您无法收到该值。
修改此部分代码
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
data_rec = JSON.parse(body);
console.info(data_rec);
return data_rec;
} else return "failed to get";
});
到这个
var request = request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
data_rec = JSON.parse(body);
console.info(data_rec);
}
});
return request.then(function (res) {
if (res.statusCode >= 300) {
return "failed to get";
} else {
return res.body.toString()
}
})