Node.js中的同步 HTTP 请求



我有三个组件ABC。 当AB发送HTTP请求时,BC发送另一个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 请求?

您正在使用restify,一旦调用其方法(postget.,它将返回promise。等(。但是您创建的方法remoterequest不会返回promise供您使用.then等待。您可以使用async-await或内置promise返回promise,如下所示:

  • 使用承诺:

    var requestify = require('requestify');
    // sends an HTTP request to C and retrieves the response content
    function remoterequest(url, data) {
    var returnedvalue;
    return new Promise((resolve) => {
    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 at the end of processing
    resolve(returnedvalue);
    }).catch(err => {
    console.log(err);
    });
    }
    // manages A's request
    function manageanotherhttprequest() {
    remoterequest(url, data).then(res => {
    return res;
    });
    }
    
  • 使用 async-await

    var requestify = require('requestify');
    // sends an HTTP request to C and retrieves the response content
    async function remoterequest(url, data) {
    try {
    var returnedvalue;
    var response = await requestify.post(url, data);
    var body = response.getBody();
    // TODO use body to send back to the client the number of expected outputs, by setting the returnedvalue variable
    // return at the end of processing
    return returnedvalue;
    } catch (err) {
    console.log(err);
    };
    }
    // manages A's request
    async function manageanotherhttprequest() {
    var res = await remoterequest(url, data);
    return res;
    }
    

相关内容

  • 没有找到相关文章

最新更新