@watch-state/async
TypeScript icon, indicating that this package has built-in type declarations

2.0.0-alpha.3 • Public • Published
Watch-State logo by Mikhail Lysikov

  @watch-state/async

 

NPM downloads changelog license

Getting async data with watch-state.

stars watchers

Installation

npm

npm i @watch-state/async

yarn

yarn add @watch-state/async

Using

Async is a Promise like class.

Async constructor expects the first required argument as an async function and the second optional one as a default value.

import Async from '@watch-state/async'

const promise = new Async(() => fetch('/test'))

then, catch, finally

then, catch and finally always return an instance of Promise

const test = new Async(async () => {}).then() instanceof Promise
// test === true 

Use then, catch and finally like on Promise

const promise = new Async(async () => 1)

promise
  .then(value => console.log('then', value))
  .finally(value => console.log('finally', value))
  .catch(value => console.log('catch', value))

loading

You may check status of Async with loading, it's true when data is loading

const promise = new Async(async () => {})
// promise.loading === true

await promise
// promise.loading === false

This is observable field, you can use Watch to observe it.

const promise = new Async(async () => {})

new Wathc(() => {
  console.log(promise.loading)
})
// true

await promise
// false

You can use the same way to watch on loaded, value, error

loaded

You may check status of Async with loaded, it's true when data was loaded at least one time

const promise = new Async(async () => {})
// promise.loaded === false

await promise
// promise.loaded === true

value

You may get current result by value field

const promise = new Async(async () => 1)
// promise.value === undefined
await promise
// promise.value === 1

error

You may handle error by error field

const promise = new Async(() => Promise.reject(1))
new Watch(() => {
  console.log(promise.error)
})
// > undefined
// > 1

update

Unlike Promise, you may reuse Async with update method

let i = 0
const promise = new Async(async () => i++)

console.log(await promise)
// > 0
// i === 1

promise.update()

console.log(await promise)
// > 1
// i === 2

You can set timeout to make update only after some time.

let i = 0
const promise = new Async(async () => i++)

console.log(await promise)
// > 0
// i === 1

promise.update(1000)
// nothing happends

await promise
// nothing happends

await new Promise(resolve => setTimeout(resolve, 1000))
// nothing happends

// 1 second passed, if use 1000ms it triggers update
promise.update(1000)

console.log(await promise)
// > 1
// i === 2

Issues

If you find a bug, please file an issue on GitHub

issues

Package Sidebar

Install

npm i @watch-state/async

Weekly Downloads

3

Version

2.0.0-alpha.3

License

MIT

Unpacked Size

27.8 kB

Total Files

9

Last publish

Collaborators

  • deight