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

0.1.2 • Public • Published

Async Mirror

Version Typings

This library helps to represent any state of an asynchronous action as an object

Installing

$ npm i -SE @redtea/async-mirror

Use case

React

import React from 'react';
import * as AsyncMirror from '@redtea/async-mirror';

class List extends React.Component {
  state = {
    list: AsyncMirror.pending()
  };
  
  componentDidMount() {
    this.tryFetchList();
  }
  
  async tryFetchList() {
    this.setState({
      list: AsyncMirror.pending()
    });
    
    try {
      const list = await fetchList();
      this.setState({
        list: AsyncMirror.resolve(list)
      });
    } catch(error) {
      this.setState({
        list: AsyncMirror.reject(error)
      });
    } 
  }
  
  render() {
    if (this.state.list.isPending) {
      return 'fetching...';
    }
    
    if (this.state.list.isRejected) {
      return this.state.list.reason.message;
    }
    
    const list = this.state.list.value;
    
    return (
      <ul>
        {
          list.map((text, index) => (
            <li key={index}>{text}</li>
          ))
        }
      </ul>
    );
  }
}

Package Sidebar

Install

npm i @redtea/async-mirror

Weekly Downloads

16

Version

0.1.2

License

ISC

Unpacked Size

8.92 kB

Total Files

9

Last publish

Collaborators

  • hokid