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

whenplus

v1.7.1g

Published

A lightweight Promise and when() implementation, plus other async goodies.

Downloads

21

Readme

when.js Build Status

When.js is cujojs's lightweight CommonJS Promises/A and when() implementation, derived from the async core of wire.js, cujojs's IOC Container. It also provides several other useful Promise-related concepts, such as joining multiple promises, mapping and reducing collections of promises, timed promises, and has a robust unit test suite.

It passes the Promises/A Test Suite, is frighteningly fast, and is under 1.3k when compiled with Google Closure (w/advanced optimizations) and gzipped, and has no dependencies.

What's New?

1.7.1

  • Removed leftover internal usages of deferred.then.
  • when/debug allows configuring the set of "fatal" error types that will be rethrown to the host env.

1.7.0

  • DEPRECATED: deferred.then is deprecated and will be removed in an upcoming release. Use deferred.promise.then instead.
  • promise.yield(promiseOrValue) convenience API for substituting a new value into a promise chain.
  • promise.spread(variadicFunction) convenience API for spreading an array onto a fulfill handler that accepts variadic arguments. Mmmm, buttery
  • Doc improvements:
    • when() and promise.then() have more info about callbacks and chaining behavior.
    • More info and clarifications about the roles of Deferred and Resolver
    • Several minor clarifications for various APIs
  • Internal improvements to assimilation and interoperability with other promise implementations.

1.6.1

  • Fix for accidental coercion of non-promises. See #62.

1.6.0

  • New when.join - Joins 2 or more promises together into a single promise.
  • when.some and when.any now act like competitive races, and have generally more useful behavior. Read the discussion in #60.
  • Experimental progress event propagation. Progress events will propagate through promise chains. Read the details here.
  • Temporarily removed calls to Object.freeze. Promises are no longer frozen due to a horrendous v8 performance penalty. Read discussion here.
    • IMPORTANT: Continue to treat promises as if they are frozen, since freeze() will be reintroduced once v8 performance improves.
  • when/debug now allows setting global a debugging callback for rejected promises.

Full Changelog

Docs & Examples

API docs

More info on the wiki

Examples

Quick Start

AMD

  1. git clone https://github.com/cujojs/when or git submodule add https://github.com/cujojs/when

  2. Configure your loader with a package:

    packages: [
    	{ name: 'when', location: 'path/to/when/', main: 'when' },
    	// ... other packages ...
    ]
  3. define(['when', ...], function(when, ...) { ... }); or require(['when', ...], function(when, ...) { ... });

Script Tag

  1. git clone https://github.com/cujojs/when or git submodule add https://github.com/cujojs/when
  2. <script src="path/to/when/when.js"></script>
  3. when will be available as window.when

Node

  1. npm install when
  2. var when = require('when');

RingoJS

  1. ringo-admin install cujojs/when
  2. var when = require('when');

Running the Unit Tests

Node

Note that when.js includes @domenic's Promises/A Test Suite. Running unit tests in Node will run both when.js's own test suite, and the Promises/A Test Suite.

  1. npm install
  2. npm test

Browsers

  1. npm install
  2. npm start - starts buster server & prints a url
  3. Point browsers at /capture, e.g. localhost:1111/capture
  4. npm run-script test-browser

References

Much of this code was inspired by @unscriptable's tiny promises, the async innards of wire.js, and some gists here, here, here, and here

Some of the code has been influenced by the great work in Q, Dojo's Deferred, and uber.js.