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

promise-one-success

v1.1.2

Published

Typescript-friendly promise that resolves with the first successful promise

Downloads

145

Readme

promise-one-success

promise-one-success is a lightweight, zero-dependency JavaScript module designed to facilitate handling multiple asynchronous operations by succeeding if at least one promise resolves successfully. It's particularly useful in scenarios where you have multiple redundant or parallel operations, and you require only one to succeed to proceed, such as requesting a resource from multiple mirrors or endpoints.

Features

  • Simple API: A straightforward and intuitive API that requires minimal setup.
  • Zero Dependencies: No external dependencies, ensuring fast installation and low bundle size.
  • TypeScript Support: Comes with TypeScript typings, making it ideal for TypeScript projects.
  • Versatile: Useful in any situation where you need to succeed with the first resolved promise among many, such as API calls to multiple servers, parallel I/O operations, etc.

Installation

You can install promise-one-success using npm or yarn:

npm install promise-one-success

or

yarn add promise-one-success

Usage

Here's a basic example of how to use promise-one-success:

import oneSuccess from 'promise-one-success';

const promise1 = new Promise((resolve, reject) => setTimeout(reject, 100, 'First fails'));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 200, 'Second succeeds'));
const promise3 = new Promise((resolve, reject) => setTimeout(reject, 300, 'Third fails'));

oneSuccess([promise1, promise2, promise3])
  .then(result => console.log(result)) // Logs: "Second succeeds"
  .catch(errors => console.error(errors)); // Not called in this case

API

oneSuccess(promises: Array<Promise>): Promise

Accepts an array of promises and returns a new promise that resolves as soon as one of the input promises resolves. If all input promises are rejected, the returned promise is rejected with an array of all rejection reasons.

  • promises: An array of Promise<T> instances.
  • Returns: A Promise<T> that resolves or rejects according to the rules described above.

TypeScript Support

promise-one-success includes TypeScript definitions. When using TypeScript, you can take advantage of strong typing as shown below:

import oneSuccess from 'promise-one-success';

async function fetchDataFromMirrors(): Promise<string> {
  const mirrors: Promise<string>[] = [
    fetchFromMirror1(),
    fetchFromMirror2(),
    fetchFromMirror3(),
  ];

  return oneSuccess<string>(mirrors);
}

async function fetchFromMirror1(): Promise<string> {
  // Implementation...
}

async function fetchFromMirror2(): Promise<string> {
  // Implementation...
}

async function fetchFromMirror3(): Promise<string> {
  // Implementation...
}

Contributing

Contributions are welcome! If you'd like to contribute, feel free to fork the repository and submit a pull request.

Running Tests

To run tests, first install the development dependencies:

npm install

Then, you can run the tests using:

npm test

License

promise-one-success is MIT licensed. See the LICENSE file for more details.