我有三个组件A
、B
和C
。当A
向B
发送一个HTTP请求时,B
会向C
发送另一个HTTP请求,检索相关内容并将其作为HTTP响应发送回A
。
下面的Node.js片段表示B
组件。
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;
}
作为remoterequest
函数的结果,我需要返回body
内容。我注意到,目前POST请求是异步的。因此,在将returnedvalue
变量返回给调用方法之前,决不会对其赋值。
如何执行同步HTTP请求?
发布于 2018-05-21 20:17:43
您正在使用restify
,一旦调用它的方法(post
,get
..etc ),它将返回promise
。但是您创建的remoterequest
方法不会返回promise
,让您使用.then
等待。您可以使用async-await
或内置promise
来返回promise
,如下所示:
使用promise的
var requestify = require('requestify');//向C发送HTTP请求,获取响应内容函数remoterequest(url,data) { var return data;return new Promise((resolve) => { requestify.post(url,data).then(function ( response ) { var body = response.getBody();// TODO通过设置return data变量},使用body向客户端返回期望输出数量);//在处理结束时返回resolve( returnedvalue );}).catch(err => { console.log(err);});} //管理A的请求函数manageanotherhttprequest() { remoterequest(url,data).then(res => { return res;});}使用异步等待的
var requestify = require('requestify');//发送HTTP请求到C,获取响应内容异步函数remoterequest(url,data) { try { var return data;var response = await requestify.post(url,data);var body = response.getBody();// TODO通过设置return data变量// return在处理结束时返回return return data;} catch (err) { console.log(err);};} //管理A的请求异步函数管理其他remoterequest(){ var res = await remoterequest(url,data);return res;}
https://stackoverflow.com/questions/50448635
复制相似问题