【问题标题】:q-io: how to read response.body JSON object using Promises?q-io:如何使用 Promises 读取 response.body JSON 对象?
【发布时间】:2016-01-28 18:55:39
【问题描述】:

我需要从一台服务器向另一台服务器发出 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 将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() 返回一个 Buffer 而只是 response.body 没有返回数组(正如文档所说,它返回一个可读流的表示)...我怎样才能正确处理这个以正确获取数组with Promises

【问题讨论】:

  • 我觉得你不需要read(),直接用return response.body
  • @ZohaibIjaz 不,它不返回数组,它返回 body Object,正如文档所说,它是 可读流的表示,或者是请求或响应。它被实现为 Q-IO 阅读器。
  • 你可能不得不.read().then(JSON.parse)
  • @Bergi 谢谢,这实际上是我想要的,但没有意识到我可以这样说!发布答案,我会将其标记为正确。
  • 我不确定它是否有效,因为您说这是对 缓冲区 的承诺,而不是字符串。但也许它被铸造得很好......

标签: javascript node.js http httprequest httpresponse


【解决方案1】:

如果您可以获得响应正文内容的承诺,您可以通过 JSON.parse 传递 JSON 有效负载来获得承诺:

return HTTP.request(request)
  .then(function(response) { return response.body.read() })
  .then(JSON.parse);

【讨论】:

    【解决方案2】:

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

    看来您必须使用forEach 才能获取所有项目

    【讨论】:

    • 但 forEach 似乎使用回调,我想返回一个承诺
    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多