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

q-io: how to read response.body JSON object using Promises?

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

将处理此请求的服务器将只是 return 一个 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 将 http 请求发送到该 GET 方法 /array 并获取数组:

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()return是一个缓冲区,只是response.body 不 return 数组(正如文档所说,它 return 是可读流的表示)...我如何正确处理它以正确获取数组 有承诺?

来自文档,https://github.com/kriskowal/q-io#body

看来你必须使用forEach才能获得所有物品

如果您可以获得对响应正文内容的承诺,则可以通过 JSON.parse:

从中获得对 JSON 有效负载的承诺
return HTTP.request(request)
  .then(function(response) { return response.body.read() })
  .then(JSON.parse);