我正在尝试通过请求方法获取JSON响应并返回输出,以便在调用函数时我可以将其存储在变量中。当我在请求方法中记录响应时,它工作正常。但是当我返回输出时,它不会返回。
$soap_object->on_action( sub { $soapAction->{Auth} });
my $response = $soap_object->Auth(
SOAP::Data->type('string')->name('strUserName')->value($user_name),
SOAP::Data->type('string')->name('strPassword')->value($password)
);
答案 0 :(得分:0)
你的方法实际上做的是运行以下两行
var request = require('request');
request(url, function(error, response, body) {
...然后立即退出该功能,此时您的调用代码将被取消定义。在请求完成之前,不会调用回调,这可能要晚得多。
为了使它工作,你的函数也需要一个回调函数,当函数实际完成时调用,如:
var getAPIresponse = function(url, cb) {
var request = require('request');
request(url, function(error, response, body) {
if(!error && response.statusCode == 200) {
console.log(body); // WORKS PERFECTLY
} else {
console.log("Error: "+ error);
}
cb(error, body);
});
};
router.get('/', function (req, res) {
var poolList = getAPIresponse("www.addAURL", function(err, poolList) {
// This is run in a callback once the request is done.
console.log(poolList);
res.render('index', model);
});
});
另一种方法是使用promises,当回调数量失控时,可以稍微清理代码。