我有三个组件A
、B
和C
。当A
向B
发送HTTP请求时,B
向C
发送另一个HTTP请求,检索相关内容并将其作为HTTP响应发送回A
。B
组件由以下Node.js片段表示。
var requestify = require('requestify');
// sends an HTTP request to C and retrieves the response content
function remoterequest(url, data) {
var returnedvalue;
requestify.post(url, data).then(function(response) {
var body = response.getBody();
// TODO use body to send back to the client the number of expected outputs, by setting the returnedvalue variable
});
return returnedvalue;
}
// manages A's request
function manageanotherhttprequest() {
// [...]
var res = remoterequest(url, data);
// possible elaboration of res
return res;
}
我需要返回body
内容作为remoterequest
函数的结果。我注意到,目前,POST请求是异步的。因此,在将returnedvalue
变量返回给调用方法之前,它从未被赋值。
如何执行同步HTTP请求?
2条答案
按热度按时间rvpgvaaj1#
您正在使用
restify
,它将在调用其方法(post
,get
..等)时返回promise
。但是您创建的remoterequest
方法不会返回promise
,您可以使用.then
等待。您可以使用async-await
或内置的promise
返回promise
,如下所示:yhxst69z2#
你可以使用sync-request-curl发送同步HTTP请求,这是我在2023年编写的一个库。
它包含了原始sync-request中的一部分功能,但利用了node-libcurl来提高NodeJS的性能。
一个简单的HTTP GET请求可以写如下:
对于您的情况,您的函数可以按以下同步方式重写:
希望这对你有帮助:)