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

@araki-packages/promise-serial

v2.0.2

Published

Promiseを直列で実行する方法を提供します。

Downloads

42

Readme

promise-serial

概要

Promiseを直列で実行する方法を提供します。

仕様

Middlewareで制御しており、処理を柔軟に追加する事が可能です。

自分で制作する場合は src/middlewares を参考にしてください。

下記にライフサイクルを記述します。

実行順

  1. initialize
  2. execute(下記を1プロミスおきに実施)
    1. beforeUpdate
    2. update
    3. updated
  3. finished
  4. editResult

initialize

初期化関数

フィールド定義等に使用

beforeUpdate

対象となるPromiseを発火させる前に実施される。

update

対象となるPromiseを発火し終わった後に実施される。(Resultには反映されていません)

updated

対象となるPromiseを発火し終わった後に実施される。(Resultには反映された後です)

finished

全ての処理が終了したタイミングにエラーが起きようが起きなかろうが実施される。

error

Throwされたタイミングに実施

editResult

PromiseSerialの結果が搬入される。

getting started

  • npm install @araki-packages/promise-serial
  • yarn add @araki-packages/promise-serial

usage

import { promiseSerial, CanceledError } from '@araki-packages/promise-serial';

const waitForPromise = async (wait: number, val: string): Promise<string> => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(val);
        }, wait)
    });
};

const main = async () => {
    // キャンセル無
    const items = ['done 1', 'done 2', 'done 3', 'done 4'];
    const results = promiseSerial(items.map((val) => () => waitForPromise(100, val)));
    console.log(await results.value)
    // ['done 1', 'done 2', 'done 3', 'done 4']

    // キャンセル有
    try {
        const items = ['done 1', 'done 2', 'done 3', 'done 4'];
        const results = promiseSerial(items.map((val) => () => waitForPromise(100, val)));
        console.log(await waitForPromise(110, 'cancel'));
        results.cancel();
        console.log(await results.value)
    } catch (err) {
        if (err instanceof CanceledError) {
            console.error(err.results);
            // ['done1']
        }
    }
};

main();