Skip to content

mostjs/x-xhr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

@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)

About

EXPERIMENTAL: XHR with @most/core

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published