0

所以我开始使用requestjs我很满意的方法,但我想知道是否有某种方式可以以一种方式进行管道传输,就像你对 Promise 所做的那样:

function foo(url) {
  return request({ "url": url, "json": true })
}
let result = foo("https://jsonplaceholder.typicode.com/posts/1")
result.pipe(process.stdout)
result.on('data', console.log)
  • pipe我不能访问对象本身,所以我不能只流式传输身体
  • 并且 on 不遵守我的规范来解析对 json 的响应

所以我不能使用其中任何一个来访问我收到的 json。当然我可以使用JSON.parse,但我正在寻找一些更简单的方法来操作响应(类似于承诺),我觉得我错过了大局。

4

1 回答 1

1

你有理由需要使用流吗?你总是可以将请求包装在一个承诺中。

这是非常高的水平,但希望这可以让你走上正确的道路。

function makeRequest(params) {
  return Promise((resolve, reject) => {
    request(params, (err, response) => {
      if (err) {
        return reject(err);
      }
      return resolve(response);
    };
  });
}


const params = {
  url: 'foo.com',
  method: 'GET',
  json: true,
};

makeRequest(params)
  .then(response => {
    if (response.statusCode === 200) {
      return Promise.resolve(response.body);
    } else if (response.statucCode === 404) {
      const err = {
        message: 'Not Found',
        code: 404,
      };
      return Promise.reject(err);
    }
  })
  .then(body => // do something fun with data)
  .catch(err => // handle error);
于 2017-03-29T20:14:51.087 回答