@thejohnfreeman/await-observable
TypeScript icon, indicating that this package has built-in type declarations

1.0.4 • Public • Published

await-observable

Asynchronous functions for observables.

npm code style: Prettier build status

A longer version of the justification for this library is available on my blog. In brief, we're missing the observable equivalent of asynchronous functions. Chaining operators like map, filter, and catchError with observables that yield a single value is as painful as chaining callbacks on promises. Asynchronous functions let us write asynchronous code in a synchronous style, which is easier to read, write, and comprehend. Short of native syntax like async/await, we can offer a decorator for generator functions.

Usage

import { async } from '@thejohnfreeman/await-observable'

const logIn = async(function*({ username, password }) {
  try {
    const token = yield ajax.getJSON(
      'https://example.com/login', { username, password })
    return { value: token }
  } catch (cause) {
    return { error: 'Wrong username or password.' }
  }
})

const observable = logIn({ username, password }) // Request not yet sent.
const subscription = observable.subscribe( // Request sent now.
  ({ value }) => console.log('token', value),
  ({ error }) => console.error('error', error),
)
subscription.unsubscribe() // Request canceled.

FAQ

Why did you name your export async?

To mimic asynchronous function syntax as closely as possible. If you don't like that style, you can easily rename it:

import { async as myFavoriteName } from '@thejohnfreeman/await-observable'

Package Sidebar

Install

npm i @thejohnfreeman/await-observable

Weekly Downloads

1

Version

1.0.4

License

MIT

Unpacked Size

173 kB

Total Files

17

Last publish

Collaborators

  • thejohnfreeman