rf
request-fluture
npm i request-fluture
rf

request-fluture

🦋 Simple HTTP requests with Fluture and request.

by Marc Löhe

2.0.0 (see all)License:MITTypeScript:Not Found
npm i request-fluture
Readme

request-fluture

Build Status

Simple HTTP requests with Flutures and request.

This is a wrapper around request to offer a Fluture API (instead of callback- or promise-based).

Install

# If you are using npm
npm install request-fluture request fluture

# If you are using yarn
yarn add request-fluture request fluture

Usage

Call the exported function with either a url or an options object according to the request docs. It returns a Fluture for your pending request. You can use the whole Fluture API to do stuff with your result.

const request = require('request-fluture');

request('http://example.com')
    .fork(
       error => console.error('Oh no!', error),
       response => console.log('Got a response!', response)
     );

Fetch data from a REST API and extract some specific data.

const request = require('request-fluture');
const { encase } = require('fluture');

request({url: 'https://api.github.com/users/github', headers: {'User-Agent': 'request-fluture'}})
    .map(res => res.body)
    .chain(encase(JSON.parse))
    .map(user => user.name)
    .fork(
      console.error,
      name => console.log(`The requested username is ${name}.`)
    );

You can cleanly cancel the request fluture anytime after using a consuming function like fork on it:

const request = require('request-fluture');

const cancel = request('http://example.com')
    .fork(console.error, console.log);

// Cancel the request
setTimeout(cancel, 1000);

This is for example also used to cleanly cancel requests whose results are not interesting anymore like when using race, saving your precious bandwidth.

Examples

Race

Race multiple requests against each other and resolve to the first settled request.

const Future = require('fluture');
const request = require('request-fluture');

// Race two requests against each other…
request('http://example.com/foo')
  .race(request('http://example.com/bar'))
  .fork(console.error, console.log);

// …or race an array of requests
const first = futures => futures.reduce(Future.race, Future.never);
first([
  request('http://example.com/foo'),
  request('http://example.com/bar'),
  request('http://example.com/baz')
])
  .fork(console.error, console.log);

You can easily implement a timeout for your requests with this:

const Future = require('fluture');
const request = require('request-fluture');

request('http://example.com/foo')
  .race(Future.rejectAfter(1000, 'Timeout'))
  .fork(console.error, console.log);

Parallel requests

Execute five requests with maximum 5 requests in parallel.

const Future = require('fluture');
const request = require('request-fluture');

const tenRequests = Array.from(Array(10).keys())
  .map(resource => request(`http://example.com/${resource}`));

Future.parallel(5, tenRequests)
  .fork(
    console.error,
    results => { results.forEach(console.log); }
  );

Prior art

This is just a slight extension of a Gist by @Avaq.

Downloads/wk

319

GitHub Stars

17

LAST COMMIT

3yrs ago

MAINTAINERS

1

CONTRIBUTORS

2

OPEN ISSUES

0

OPEN PRs

0
VersionTagPublished
2.0.0
latest
3yrs ago
No alternatives found
No tutorials found
Add a tutorial