@watch-state/async

Get async data for watch-state

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@watch-state/async
002.0.0-alpha.3a year ago3 years agoMinified + gzip package size for @watch-state/async in KB

Readme

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