Javascript q-io:如何使用承诺读取response.body JSON对象?

Javascript q-io:如何使用承诺读取response.body JSON对象?,javascript,node.js,http,httprequest,httpresponse,Javascript,Node.js,Http,Httprequest,Httpresponse,我需要从一台服务器向另一台服务器发出http请求 处理此请求的服务器将只返回一个JSON对象数组: app.get('/array', function (req, res) { console.log('GET request received!'); var response_array = [ { value: 1234 }, { value: 1234 }, { value: 55 } ];

我需要从一台服务器向另一台服务器发出http请求

处理此请求的服务器将只返回一个JSON对象数组:

app.get('/array', function (req, res) {
  console.log('GET request received!');
  var response_array = [
    {
      value: 1234
    },
    {
      value: 1234
    },
    {
      value: 55
    }
  ];

  res.send(response_array);
});
我正在使用
q-io
向该GET方法
/array
发送http请求并获取数组:

var _getArray = function(externalUrl) {
  var request = {
    method: "GET",
    url: externalUrl
  };

  return HTTP.request(request)
    .then(function(response) {
      // I need to return the Array inside the body (a Promise) to
      // iterate on it later
      return response.body.read(); // but .read() returns a Buffer
    });
}
这两个服务器都工作正常,因为请求和响应都正确地从一个服务器发送到另一个服务器

问题是我没有获得JSON数组-因为
read()
返回缓冲区,而只是
响应。body
不返回数组(正如文档所说,它返回可读流的表示形式)。。。如何正确处理此问题,以正确地从文档中获取带有承诺的数组


似乎您必须使用
forEach
来获取所有项目

如果您可以获得响应主体内容的承诺,那么您可以通过以下方式获得JSON负载的承诺:


我认为您不需要read(),只需使用
return response.body
@ZohaibIjaz不,它不返回数组,而是返回数组,正如文档所说,它是一个可读流的表示形式,用于请求或响应的内容。它是作为Q-IO阅读器实现的。您可能需要
.read()。然后(JSON.parse)
@Bergi谢谢,这正是我想要的,但我没有意识到我可以这么说!发布一个答案,我会把它标记为正确。我不确定它是否有效,因为你说这是一个缓冲区的承诺,而不是字符串。但也许它被铸造的很好…但forEach似乎使用回调,我想回报一个承诺
return HTTP.request(request)
  .then(function(response) { return response.body.read() })
  .then(JSON.parse);