@most/xhr
v0.1.0
Published
XHR with @most/core
Downloads
4
Readme
@most/xhr
Make XMLHttpRequests with @most/core
. Provide a function to setup the XMLHttpRequests however you want/need and get back a Stream containing the load
(or error
, or timeout
) event.
Get it
npm i @most/xhr --save
yarn add @most/xhr
API
request :: (() → XMLHttpRequest) → Stream ProgressEvent
Provide a function to setup the XMLHttpRequest however you need (e.g. setting request headers, etc.), but don't call .send()
. Running the Stream will invoke the function, send the returned XMLHttpRequest, handle events, and call .abort()
when necessary.
The returned Stream will contain at most 1 event: the ProgressEvent emitted by XMLHttpRequest's load
, error
, or timeout
events.
import { request } from '@most/xhr'
const responseStream = request(() => {
const xhr = new XMLHttpRequest()
xhr.responseType = 'json'
xhr.open('GET', 'https://...', true)
return xhr
})
Handling errors
By default, the returned stream does not fail for errors or for successful HTTP requests whose status is >= 300. This allows you to handle error events and HTTP status codes in whatever way is best for your application.
If you need, you can detect errors and turn them into Stream failures using chain()
:
import { request } from '@most/xhr'
import { chain, now, throwError } from '@most/core'
const responseStream = request(() => {
const xhr = new XMLHttpRequest()
// setup xhr ...
return xhr
})
const failOnError = progressEvent =>
progressEvent.type === 'error'
? throwError(new Error(...))
: now(progressEvent)
const failOnErrorStream = chain(failOnError, responseStream)