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.
npm i @most/xhr --save
yarn add @most/xhr
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
})
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)