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.prototypes

v1.0.2

Published

Async prototype functions for arrays and similar objects

Downloads

8

Readme

AsyncPrototypes is a generic solution for the problematic behavior of some JavaScript callbacks that can not be executed asynchronously. An example is Array.map function.

const foo = [1,2,3,4];

foo.map( x => x*x ); 

// -> [ 1, 4, 9, 16 ]

But adding an async will lead to

foo.map( async(x) => x*x );

// -> [ Promise, Promise, Promise, Promise ]

This happens because any async function will return a Promise and not a value. This problem can produce hard to find errors in case of filter function, as any Promise is a truthy value and so the filter will accept all array members.

AsyncPrototypes replaces the prototype functions with some elegant hooks that have a very small footprint. These hooks run the original prototypes when dealing with synchronous functions. But dealing with an async one, the prototype will call an async substitute that when called with await directive, its result will contain the final resolved results instead of the promises.

So, after applying AsyncPrototypes, the previous example will result correctly with only adding an await :

await foo.map( async(x) => x*x ); 

// -> [ 1, 4, 9, 16 ]

Currently, AsyncPrototypes supports

  • map
  • every
  • some
  • flatMap
  • find
  • filter
  • reduce
  • reduceRight
  • forEach

methods and fixes them in

  • Array
  • Int8Array
  • Uint8Array
  • Uint8ClampedArray
  • Int16Array
  • Uint16Array
  • Int32Array
  • Uint32Array
  • BigInt64Array
  • BigUint64Array
  • Float32Array
  • Float64Array

objects.

Usage

AsyncPrototypes can be installed from npm repository:

npm install async.prototypes

You can also import the distribution version from the unpkg repository:

<script src="https://unpkg.com/async.prototypes/dist/async.prototypes.min.js"></script>

In node environment you may import it with

const AsyncPrototypes = require('async.prototype');

AsyncPrototypes has four methods:

AsyncPrototypes.register()

For using the async prototypes, the most natural way is to call the register method once somewhere. It can be done at the beginning for convenience. It affects all existing objects and objects that will be created after.

AsyncPrototypes.register();

AsyncPrototypes.unregister()

If in some place in your code you think the registered methods would get in the way or cause any problems, you can simply unregister them.

AsyncPrototypes.unregister();

You can call register and unregister any number of times. But in case you deal with specific objects, you may instead use hook and unhook.

AsyncPrototypes.hook(obj)

The hook method is used when we only need an specific object incorporate the async prototype methods, so instead of registering for all, you hook it:

const foo = AsyncPrototypes.hook( new Array(1000) );

AsyncPrototypes.unhook(obj)

Similar to the unregister method, but works for the hooked objects back to their original ones:

AsyncPrototypes.unhook( foo );

License

Copyright (C) 2024 Arash Kazemi [email protected]. All rights reserved.

AsyncPrototypes project is subject to the terms of BSD-2-Clause License. See the LICENSE file for more details.