npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

async-status

v1.1.0

Published

A standardized way to express asynchronous state in a synchronous manner.

Downloads

52

Readme

npm version build status coverage status semantic-release code style: prettier commitizen friendly tested with jest npm license

Table of Contents 📋

Installation 📦

# with npm
npm install --save async-status

# with yarn
yarn add async-status

This assumes that you’re using a module bundler like Webpack to consume ES6 or CommonJS modules.

Concept 💡

The goal of this package is to provide a unified and standardized representation of asynchronous status. It helps to integrate other libraries that translate asynchronous state to synchronous state (for example Redux). Instead of using different flags like isLoading, isPending, hasError, this library represents asynchronous status as a one-variable - status.

There are 4 possible statuses:

  • AsyncStatus.IDLE ⚫️ - means that nothing happens - it's the initial status
  • AsyncStatus.PENDING ⏳ - means that async action is pending
  • AsyncStatus.RESOLVED ✅ - means that async action has been successfully finished
  • AsyncStatus.REJECTED ❌ - means that an error occurred during async action

There are no constraints about transitions between given statuses.

To give a better understanding of the relationship between AsyncStatus and asynchronous code let's try with real code:

import AsyncStatus from "async-status";

const state = {
  status: AsyncStatus.IDLE
};

function fetchUsers() {
  state.status = AsyncStatus.PENDING;

  fetch("/api/user")
    .then(response => response.json())
    .then(data => {
      state.data = data;
      state.status = AsyncStatus.RESOLVED;
    })
    .catch(error => {
      state.error = error;
      state.status = AsyncStatus.REJECTED;
    });
}

fetchUsers();

As you can see, you don't have to introduce any boolean flags like isPending 👌

API reference 📖

The status is a primitive value - string or undefined.

AsyncStatus.IDLE = undefined;
AsyncStatus.PENDING = "PENDING";
AsyncStatus.RESOLVED = "RESOLVED";
AsyncStatus.REJECTED = "REJECTED";

AsyncStatus.all(...statuses: AsyncStatus[]): AsyncStatus

Combines many statuses into one status using an algorithm similar to Promise.all method. Basically the algorithm is:

  1. if statuses list is empty, result = IDLE
  2. if one of the statuses is equal REJECTED, result = REJECTED
  3. if one of statuses is equal PENDING, result = PENDING
  4. if all statuses equal RESOLVED, result = RESOLVED
  5. in other cases, result = IDLE

isAsyncStatus(candidate: any): candidate is AsyncStatus

Checks if a given candidate is an AsyncStatus (means that it's equal undefined or 'PENDING' or 'RESOLVED' or 'REJECTED')

Typings 📐

If you are using TypeScript, typings are provided in the npm package. This library doesn't provide Flow typings.

License

MIT